我正在尝试使用XCTest框架测试我的应用程序.
如果某些逻辑条件成立(使用断言),我希望我的单个测试用例失败.我不希望测试用例中的其余代码运行,因为这可能会导致问题(例如,访问空指针)我还希望测试用例的其余部分正常运行,并且只是失败的测试被标记为失败.
我注意到XCTestCase有一个名为continueAfterFailure的属性.但是,将其设置为YES会导致失败的测试在断言后继续执行行,并将其设置为NO导致其余测试根本不运行.
这个问题有解决方案吗?谢谢,Yoav
Osc*_*rro 15
帕斯卡的答案给了我正确实现这一目标的想法.当断言失败时,XCTool现在的行为类似于OCUnit:立即中止测试用例的执行,调用tearDown并运行下一个测试用例.
只需覆盖invokeTest基类中的方法(继承自XCTestCase类的方法):
- (void)invokeTest
{
self.continueAfterFailure = NO;
@try
{
[super invokeTest];
}
@finally
{
self.continueAfterFailure = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
而已!
最简单的方法是添加:
continueAfterFailure = false
Run Code Online (Sandbox Code Playgroud)
进入setUp()方法.所以它看起来像这样:
迅速
override func setUp() {
super.setUp()
continueAfterFailure = false
}
Run Code Online (Sandbox Code Playgroud)
Objective-C的
- (void)setUp {
[super setUp];
[self setContinueAfterFailure:NO];
}
Run Code Online (Sandbox Code Playgroud)
一种选择是正常检查条件,然后失败,如果结果为假,则从测试中返回。
像这样:
if (!condition) {
XCFail(@"o noes");
return;
}
Run Code Online (Sandbox Code Playgroud)
您可以将其包装在辅助宏中以保持可读性。
像Kiwi这样的BDD测试库在这种情况下更为优雅,因为它们使在许多测试之间共享设置变得更加容易,从而导致每个测试的断言更少。
我可以使用continueAfterFailure此模式并让其他测试运行:
self.continueAfterFailure = NO;
@try
{
// Perform test code here
}
@finally
{
self.continueAfterFailure = YES;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15825 次 |
| 最近记录: |