Ios 如何为自定义XCTest断言编写自动测试?

Ios 如何为自定义XCTest断言编写自动测试?,ios,swift,unit-testing,automated-tests,xctest,Ios,Swift,Unit Testing,Automated Tests,Xctest,我正在开发一个新的应用程序。我还希望对这个测试框架进行良好的测试。问题是,我不知道如何为我的测试目标编写一个测试来断言我的框架正确地导致了失败的测试。如果我创建了一个失败的测试,我又导致了测试失败(我知道,这很混乱) 举个例子。我的框架的一部分包括验证特定代码段没有任何中断约束的函数 MTKAssertNoBrokenConstraints { // UI code that might break some constraints } 我已经手工测试了它,以验证当没有损坏的约束时,断

我正在开发一个新的应用程序。我还希望对这个测试框架进行良好的测试。问题是,我不知道如何为我的测试目标编写一个测试来断言我的框架正确地导致了失败的测试。如果我创建了一个失败的测试,我又导致了测试失败(我知道,这很混乱)

举个例子。我的框架的一部分包括验证特定代码段没有任何中断约束的函数

MTKAssertNoBrokenConstraints {
    // UI code that might break some constraints
}
我已经手工测试了它,以验证当没有损坏的约束时,断言通过,但是当有损坏的约束时,它正确地将测试标记为失败

但是我需要一种方法来验证
MTKAssertNoBrokenConstraints
是否会将测试标记为失败,而不会实际将测试本身标记为失败。


我已经考虑过创建一个符合
XCTestObservation
的自定义对象,但到目前为止,我只得到了无限递归。我不确定这是否是正确的路径,或者解决无限递归是否真的能让我达到我需要的位置。

下面的测试截取了
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)\"")
    }

}

这个问题的答案将帮助我解决这个问题。我会很感激这里的答案,或者是解决这个问题的请求,或者两者兼而有之。好吧,这让我有很多事情要做。我将寻找一个更干净的实现,而不仅仅是设置一个标志,但我喜欢这样。