【问题标题】:teardown for whole test suite整个测试套件的拆解
【发布时间】:2013-11-22 10:12:37
【问题描述】:

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

+ (void)tearDown

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

- (void)tearDown

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

【问题讨论】:

  • - 您使用的是哪个测试框架? - 为什么需要进行最终拆解?
  • 我正在使用 sentest。在 xcode 5 中,我的测试覆盖率生成失败了。我搜索并发现我们必须运行 __gcov_flush 才能构建 .gcda 文件。为此,我必须在整个测试套件之后运行此功能。

标签: ios iphone unit-testing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您可以使用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];
        }
    }
    

    【讨论】:

    • 是的!我可以这样做,但为此我将不得不更改我不想要的现有测试。我不能为整个套件添加一些特殊功能,例如拆解吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多