如何将XCTest标记为待处理?

时间:2015-09-28 14:23:11

标签: xcode unit-testing tdd xctest

我有一个XCTestCase的子类,我想将一些测试标记为pending,方式与RSpec相同

https://www.relishapp.com/rspec/rspec-core/v/2-0/docs/pending/pending-examples

2 个答案:

答案 0 :(得分:2)

没有简单的方法可以做到这一点。最实用的解决方案是注释或重命名您的测试:

@implementation MyTestCase

- (void)testSomething { /* ... */ }

// Option 1: Comment out the test.
// - (void)testSomething { /* ... */ }

// Option 2: Rename the test such that XCTest does not consider 
// it a valid test method. In order to be "valid", it needs to:
// 
// - Have a return type of `void`
// - Take no parameters
// - Begin with "test"
//
// Here, we rename the test so that it does not begin with "test".
- (void)PENDING_testSomething { /* ... */ }

@end

当然,关于RSpec的一个好处是它打印出某种警告。您可以使用#warning

自行添加
#pragma Pending!
- (void)PENDING_testSomething { /* ... */ }

这会在Xcode中显示警告。请记住,#warning仅适用于Objective-C,而不是Swift。

QuickSpecta等测试框架提供了待处理的示例:

pending("tests something") { /* ... */ }
xit("tests something") { /* ... */ }
xdescribe("describes something") { /* ... */ }
xcontext("provides context for something") { /* ... */ }

这些测试框架可以阻止“挂起”测试通过覆盖-[XCTestCase testInvocations]来运行。这样做有很多工作,但如果你想自己实施“待定测试”,你也可以考虑这样做。

答案 1 :(得分:0)

它还没有完全悬而未决,但是如果你的主管认为未决的测试是一个失败的套件(我是我的团队的领导者,而且我确实如此),那么一个简单的XCTFail()可以完成这项任务:

#pragma mark - Something Tests

- (void)testSomething_scenario_result {
    XCTFail(@"Pending Test: %@",NSStringFromSelector(_cmd));
}

然后,如果您因任何原因(可能是个人开发分支)需要保留待处理的测试,您可以轻松查看哪些失败是相关的,但是在完成之前整个套件仍然会失败。

对于" true"等待,modocache的答案要完整得多。