如何检查 XCTestCase 测试是否失败
How to check if an XCTestCase test has failed
是否可以在 运行 测试中检查其 XCTAssert
是否有任何失败?我有一个包含连续几个断言的测试,我想在之后添加一些代码以在其中任何一个失败时执行特定操作:
class testClass : XCTestCase
{
func testSomething()
{
let someComputedValue1 = func1()
let someComputedValue2 = func2()
XCTAssertLessThanOrEqual(someComputedValue1, 0.5)
XCTAssertLessThanOrEqual(someComputedValue2, 0.2)
if anyOfTheAboveAssertionsFailed {
performAction()
}
}
}
我想要提示的部分是 anyOfTheAboveAssertionsFailed
条件而不重复与硬编码值的比较。
你当然可以写一个新函数...
func assertLessThanOrEqual(value: Double, limit: Double) -> Bool {
XCTAssertLessThanOrEqual(value, limit)
return value <= limit
}
然后像这样编写测试...
var allGood = true
allGood = allGood && assertLessThanOrEqual(someComputedValue1, 0.5)
allGood = allGood && assertLessThanOrEqual(someComputedValue2, 0.2)
if !allGood {
performAction()
}
虽然使用自己的断言方法解决了 PO 的问题,但如果您需要使用多个 XCAssert 方法,那就很麻烦了。
另一种方法是覆盖continueAfterFailure
。如果没有失败,则不会请求 属性。有的话就给。
class MyTest: XCTest {
private var hasFailed = false
override var continueAfterFailure: Bool {
get {
hasFailed = true
return super.continueAfterFailure
}
set {
super.continueAfterFailure = newValue
}
}
override func tearDown() {
if hasFailed { performAction() }
hasFailed = false
}
}
是否可以在 运行 测试中检查其 XCTAssert
是否有任何失败?我有一个包含连续几个断言的测试,我想在之后添加一些代码以在其中任何一个失败时执行特定操作:
class testClass : XCTestCase
{
func testSomething()
{
let someComputedValue1 = func1()
let someComputedValue2 = func2()
XCTAssertLessThanOrEqual(someComputedValue1, 0.5)
XCTAssertLessThanOrEqual(someComputedValue2, 0.2)
if anyOfTheAboveAssertionsFailed {
performAction()
}
}
}
我想要提示的部分是 anyOfTheAboveAssertionsFailed
条件而不重复与硬编码值的比较。
你当然可以写一个新函数...
func assertLessThanOrEqual(value: Double, limit: Double) -> Bool {
XCTAssertLessThanOrEqual(value, limit)
return value <= limit
}
然后像这样编写测试...
var allGood = true
allGood = allGood && assertLessThanOrEqual(someComputedValue1, 0.5)
allGood = allGood && assertLessThanOrEqual(someComputedValue2, 0.2)
if !allGood {
performAction()
}
虽然使用自己的断言方法解决了 PO 的问题,但如果您需要使用多个 XCAssert 方法,那就很麻烦了。
另一种方法是覆盖continueAfterFailure
。如果没有失败,则不会请求 属性。有的话就给。
class MyTest: XCTest {
private var hasFailed = false
override var continueAfterFailure: Bool {
get {
hasFailed = true
return super.continueAfterFailure
}
set {
super.continueAfterFailure = newValue
}
}
override func tearDown() {
if hasFailed { performAction() }
hasFailed = false
}
}