我现在拥有的应用程序源代码(ObjC),有时使用 NSAssert(像许多其他程序一样)。
我看到一个单元测试正在测试使用 XCTAssertThrows 调用断言。
从 TDD 的角度来看,这对测试断言是否正确?
除此之外,如果我在测试时使用调试器,它会一直在这些断言中停止,这很烦人。如果我使用 NS_BLOCK_ASSERTIONS=1 我会解决这个问题,但显然不会再工作并且这些测试会失败。
关于如何管理的任何线索?
我现在拥有的应用程序源代码(ObjC),有时使用 NSAssert(像许多其他程序一样)。
我看到一个单元测试正在测试使用 XCTAssertThrows 调用断言。
从 TDD 的角度来看,这对测试断言是否正确?
除此之外,如果我在测试时使用调试器,它会一直在这些断言中停止,这很烦人。如果我使用 NS_BLOCK_ASSERTIONS=1 我会解决这个问题,但显然不会再工作并且这些测试会失败。
关于如何管理的任何线索?
如果遵循纯 TTD 风格,您将对断言进行测试,否则您不会首先编写它 - 即编写最少数量的代码来通过测试。
断言无疑是对错误条件的响应,并且通过拥有它,如果它被触发,您不想在断言之后执行代码。
也许用这些术语来决定 - 如果没有对其进行测试,有人可以删除断言并且构建不会中断(没有测试失败),那么在错误条件下断言之后执行代码的后果是什么?
我建议如果您出于特定原因需要断言,请对其进行测试。
如果我误解了您的问题,请原谅我;请多多包涵。
XCTAssertThrowsError
用于断言正在抛出异常。将它用于预期异常的测试,例如:
func test_Divide_GivenADivisorOfZero_ThrowDivideByZeroException()
{
let subject = Mathematician()
// test passes if the exception is thrown; otherwise it fails
XCTAssertThrowsError(try subject.Divide(5, 0))
}
如果我误解了你的问题,请告诉我,我会修改我的答案。