如何为自定义 XCTest 断言编写自动化测试?
Posted
技术标签:
【中文标题】如何为自定义 XCTest 断言编写自动化测试?【英文标题】:How can I write automated tests for custom XCTest assertions? 【发布时间】:2016-07-30 14:49:03 【问题描述】:我正在开发testing framework for ios development。我也希望这个测试框架能够得到很好的测试。问题是,我不知道如何为我的测试目标编写一个测试,断言我的框架正确地导致了失败的测试。如果我创建了一个失败的测试,我又会导致测试失败(我知道,这很混乱)。
考虑一个例子。我的部分框架包括验证特定代码 sn-p 没有任何破坏性约束的功能。
MTKAssertNoBrokenConstraints
// UI code that might break some constraints
我已经手动对此进行了测试,以验证当没有破坏的约束时,断言通过,但是当存在破坏的约束时,它正确地将测试标记为失败。
但我需要一种方法来验证 MTKAssertNoBrokenConstraints
是否会将测试标记为失败实际上不会将测试本身标记为失败。
我已经研究过创建一个符合XCTestObservation
的自定义对象,但到目前为止,我只得到了无限递归。我不确定这是否是正确的道路,或者解决无限递归是否真的会让我到达我需要的地方。
【问题讨论】:
这个问题的答案将帮助我解决Issue #2。我将不胜感激这里的答案,解决该问题的请求请求,或两者兼而有之。 【参考方案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)\"")
【讨论】:
嗯,这让我有很多事情要做。我将寻找一种更简洁的实现,而不是简单地设置一个标志,但我喜欢这个。以上是关于如何为自定义 XCTest 断言编写自动化测试?的主要内容,如果未能解决你的问题,请参考以下文章