Xcode 测试断言有意义吗?

Xcode 测试断言有意义吗?,xcode,unit-testing,tdd,xctest,xcode-debugger,Xcode,Unit Testing,Tdd,Xctest,Xcode Debugger,我现在拥有的应用程序源代码ObjC,有时像许多其他程序一样使用NSAssert 我看到一个单元测试,它测试使用XCTAssertThrows调用断言 从TDD的角度来看,测试断言是否正确 除此之外,如果我在测试时使用调试器,它会在这些断言中一直停止,这很烦人。如果我使用NS_BLOCK_断言=1,我会修复它,但显然不再有效,这些测试将失败 关于如何管理它的任何线索?如果遵循纯TTD风格,您将对断言进行测试,否则您不会首先编写断言,即编写通过测试的最少代码量 断言无疑是对错误条件的响应,如果触发了

我现在拥有的应用程序源代码ObjC,有时像许多其他程序一样使用NSAssert

我看到一个单元测试,它测试使用XCTAssertThrows调用断言

从TDD的角度来看,测试断言是否正确

除此之外,如果我在测试时使用调试器,它会在这些断言中一直停止,这很烦人。如果我使用NS_BLOCK_断言=1,我会修复它,但显然不再有效,这些测试将失败


关于如何管理它的任何线索?

如果遵循纯TTD风格,您将对断言进行测试,否则您不会首先编写断言,即编写通过测试的最少代码量

断言无疑是对错误条件的响应,如果触发了断言,则您不希望在断言之后执行代码

也许可以用这些术语来决定——如果没有对它进行测试,有人可以删除断言,并且构建不会破坏任何测试失败,那么在断言之后针对错误条件执行代码会有什么后果呢


我建议,如果您出于特定原因需要断言,那么请进行测试。

如果我误解了您的问题,请原谅;请容忍我


xctasertthrowserror用于断言正在引发异常。将其用于预期异常的测试,例如:

func test_Divide_GivenADivisorOfZero_ThrowDivideByZeroException() 
{
   let subject = Mathematician()
   // test passes if the exception is thrown; otherwise it fails
   XCTAssertThrowsError(try subject.Divide(5, 0))
}

如果我误解了你的问题,请告诉我,我会修改我的答案。

用于断言正在抛出异常否,不是测试异常,而是测试断言。在发布代码中,您根本没有断言,因此,如果您测试发布版本,测试将失败。@Ricardo从技术上讲,当预期结果未出现时,断言会产生一个特殊解释的断言异常。没有任何断言异常=通过测试。当测试您的实现是否正确抛出异常时,您使用一个专门的断言方法来捕获并接受预期的异常。感谢您的回复。测试将在发布版本中删除的代码有意义吗?关于这个例子,并没有特别的理由要有那个断言,但这不是我的代码断言可以在发行版中剥离,或者保留,这取决于您使用的是什么。我会把里面的任何东西都扔掉。被剥离的代码仅用于防止编程错误;我不会测试它,因为它只是一个工具,不是一个需求。