当我使用 XCTest 创建自定义测试套件时,为什么我的测试用例中的 +setup 没有被调用?
Why isn't +setup in my testcases being called when I create a custom test suite with XCTest?
我有一个 XCTestSuite 的子类,我即时实例化并填充测试:
+ (XCTestSuite *)defaultTestSuite {
MySuite *suite = [[MySuite alloc] initWithName:@"suite"];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(firstTest)]];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(secondTest)]];
return suite;
}
+ (void)setUp {}
- (void)setUp {}
- (void)firstTest {}
- (void)secondTest {}
每次测试都会调用 -(void)setUp
,但从未调用 +(void)setUp
。如果我不使用我的自定义 testSuite 或者我调用:
+ (XCTestSuite *)defaultTestSuite {
XCTestSuite *suite = [super defaultTestSuite];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(firstTest)]];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(secondTest)]];
它确实被调用了。这是为什么?
XCTest 有一个名为 XCTestCaseSuite
的私有内部 class,它是 XCTestSuite
的子 class。您可以查看 Swift 来源 here。它负责为您调用 +(void)setUp
。如果您想要相同的功能,则必须在您的自定义 XCTestSuite
subclass 中复制它。我在任何地方都找不到这方面的文档,但它确实有意义,因为如果测试用例来自不同的 classes,那么在调用 +(void)setUp/+(void)tearDown
方法时如何排序。
我有一个 XCTestSuite 的子类,我即时实例化并填充测试:
+ (XCTestSuite *)defaultTestSuite {
MySuite *suite = [[MySuite alloc] initWithName:@"suite"];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(firstTest)]];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(secondTest)]];
return suite;
}
+ (void)setUp {}
- (void)setUp {}
- (void)firstTest {}
- (void)secondTest {}
每次测试都会调用 -(void)setUp
,但从未调用 +(void)setUp
。如果我不使用我的自定义 testSuite 或者我调用:
+ (XCTestSuite *)defaultTestSuite {
XCTestSuite *suite = [super defaultTestSuite];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(firstTest)]];
[suite addTest:[[MyTestCase alloc] initWithSelector:@selector(secondTest)]];
它确实被调用了。这是为什么?
XCTest 有一个名为 XCTestCaseSuite
的私有内部 class,它是 XCTestSuite
的子 class。您可以查看 Swift 来源 here。它负责为您调用 +(void)setUp
。如果您想要相同的功能,则必须在您的自定义 XCTestSuite
subclass 中复制它。我在任何地方都找不到这方面的文档,但它确实有意义,因为如果测试用例来自不同的 classes,那么在调用 +(void)setUp/+(void)tearDown
方法时如何排序。