xcode 如何将XCTest标记为挂起?

bgibtngc  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(115)

我有一个XCTestCase的子类,我想将一些测试标记为pending,这与RSpec的标记方式相同
https://www.relishapp.com/rspec/rspec-core/v/2-0/docs/pending/pending-examples

ldioqlga

ldioqlga1#

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

@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]来阻止“挂起”测试的运行,这样做需要做很多工作,但是如果你想自己实现“挂起测试”,你也可以考虑这样做。

gkl3eglg

gkl3eglg2#

它并不完全是待处理的,但是如果您的主管认为待处理的测试是一个失败的套件(我是我的团队的主管,我确实是这样认为的),那么一个简单的XCTFail()就可以完成这项工作:

#pragma mark - Something Tests

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

然后,如果出于某种原因(可能是个人开发分支)需要保留一个待处理的测试,但是整个套件在完成之前仍然会失败,那么您可以很容易地看到哪些失败是相关的。
对于“真”待定,modocache的答案要完整得多。

58wvjzkj

58wvjzkj3#

虽然语义上可能有一点点不同,但是XCTSkip()可以提供您想要的东西,因为我以这种方式使用它。
如果有布尔条件可用于计算何时跳过测试,请使用XCTSkipIf()或XCTSkipUnless()。
当您有其他导致跳过测试的情况时,引发XCTSkip错误。

func testUpdatesSealCompletedCount() async throws {
    throw XCTSkip("Pending")
}

不管这意味着什么,您的测试套件仍然会通过。
这方面的好处是它用一个看起来像调试器“跳过”的图标更新了测试导航器。

相关问题