【问题标题】:How to find test that affects execution of other tests?如何找到影响其他测试执行的测试?
【发布时间】:2016-03-15 10:17:23
【问题描述】:

我目前正在努力解决一个非常棘手的问题:我正在处理一个包含大约 8 千个单元测试的项目(在相当强大的机器上执行需要 15 分钟)并且当前失败的测试不会在他们或自己运行时失败(或与其他失败的测试一起运行时),所以我猜有一些测试通过但留下了一些混乱。

我目前正在尝试使用 gradle 使用特定包中的测试运行这些测试:

test {
    filter {
        includeTestsMatching 'some.package.*'
        includeTestsMatching '*Test1'
        includeTestsMatching '*Test2'
    }
}

但是有些事情我不知道如何控制,例如测试类的执行顺序(如果有人知道如何更改顺序也会对我有所帮助)。

也许有人已经知道找到影响其他测试的测试的一些不错的过程?

【问题讨论】:

  • 一个单元测试不应该影响另一个单元测试的功能或结果
  • @Stultuske ofcourse :) 但我无法修复它,如果我找不到它:/
  • 使用bisection method,恐怕。如果整个测试总是失败,那么测试执行顺序可能每次都相同。或者,如果您可以跟踪测试开始失败的时间点,这可能是解决此问题的关键。
  • 重点是...我如何确定订单保持不变?也许测试过滤器会影响顺序,因为到目前为止我无法在较小的样本上重现问题......
  • “我怎样才能确保订单保持不变”......基本上,你不能。

标签: java gradle junit


【解决方案1】:

假设 junit 测试,那么:

  1. 定义一个test suite,指定测试类的顺序
  2. 确保您使用的是 junit 4.11 或更高版本以获得deterministic method order
  3. 仅从 gradle(或直接从您的 ide)运行测试套件
  4. 通过编辑套件来调整排序,直到问题重现为止

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多