拆解整个测试套件

时间:2013-11-22 10:12:37

标签: ios iphone unit-testing

我有一个测试套件,其中有许多测试类,每个测试类都有很多测试。 现在,如果我定义

+ (void)tearDown

在任何类中,然后它将仅在该类的所有测试之后运行。 和

- (void)tearDown
每次测试后都会运行

。 我想定义一个tearDown方法,并希望它在所有类的所有测试之后运行。 Fox,例如,如果我有5个类,每个类每个都有7个测试。所以我想在所有35次测试后运行这个tearDown函数。

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您可以使用completion block methods使用全局变量/标记来记录每个方法的完成情况,如下所示:

+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
    if (completion) {
        completion(finished);
    }
}

请查看this以获得更好的解释。

然后创建一个方法,检查是否执行了所有任务并在需要时运行最终测试,如下所示:

- (void)finalTest {
    if (CHECK GLOBAL FLAG FOR COMPLETION OF OTHER TASKES) {
        // do final test
    } else {
        // repeat check after 0.1 seconds
        [self performSelector:@selector(finalTest)
               withObject:nil
               afterDelay:0.1];
    }
}

答案 1 :(得分:0)

由于您正在寻找在所有测试完成后调用__gcov_flush()的方法,请参阅https://qualitycoding.org/ios-7-code-coverage/。 Google Toolbox for Mac的最新代码显示了如何使用测试观察器执行此操作,以及SenTestingKit和XCTest的版本。