我正在开发testing framework for iOS development。我也希望这个测试框架能够经过充分测试。问题是,我无法弄清楚如何为我的测试目标编写测试,断言我的框架正确导致测试失败。如果我创建了一个失败的测试,我反过来导致测试失败(我知道,它令人困惑)。
考虑一个例子。我的部分框架包括验证特定代码段没有任何破坏约束的函数。
MTKAssertNoBrokenConstraints {
// UI code that might break some constraints
}
我已经手动测试了这个,以验证当没有破坏约束时,断言通过,但是当存在约束时,它会正确地将测试标记为失败。
但是我需要一种方法来验证MTKAssertNoBrokenConstraints
将标记为测试为失败,而实际上并未将此测试标记为失败。
我已经研究过创建一个符合XCTestObservation
的自定义对象,但到目前为止,我只能进行无限递归。我不确定这是否是正确的路径,或者解决无限递归实际上是否会让我到达我需要的位置。
答案 0 :(得分:1)
以下测试拦截XCTFail("FOO")
的失败,然后对失败执行一些检查。
class TestTheTests: XCTestCase {
var interceptFailure = false
var failureCount = 0
var failureDescription = ""
var failureFilePath = ""
var failureLineNumber: UInt = 0
var failureExpected = false
override func recordFailureWithDescription(description: String, inFile filePath: String, atLine lineNumber: UInt, expected: Bool) {
if !interceptFailure {
super.recordFailureWithDescription(description, inFile: filePath, atLine: lineNumber, expected: expected)
} else {
failureCount += 1
failureDescription = description
failureFilePath = filePath
failureLineNumber = lineNumber
failureExpected = expected
}
}
func testExample() {
interceptFailure = true
XCTFail("FOO")
interceptFailure = false
XCTAssertEqual(failureCount, 1)
XCTAssertTrue(failureDescription.hasSuffix("FOO"), "Was \"\(failureDescription)\"")
}
}