2013-03-05 103 views
6

为什么测试方法的名称可能会影响其他测试?由于方法名称导致JUnit测试失败

我有一套有2类测试的套件,当我更改class1的方法名称时,我在class2中的测试正常(绿色)。

我注意到两个类都有一个名字相同的方法,但是失败的测试不是这些。但是,如果我重命名它们,所有测试都可以。

可以在同一个套件中使用同一名称的两个方法吗?另一个测试随机失败的事实只是一个巧合?

ps:重命名该方法后,运行的测试顺序发生了变化。 ps2:抱歉我的英文不好。

那张照片能更好地解释我的问题: enter image description here

+11

测试是否设计得很好,以确保它们的运行顺序?是否有任何状态可以依赖于它们运行的​​顺序? – vikingsteve 2013-03-05 19:20:17

+6

问题可能是执行的顺序而不是测试的名称。一个(或多个)测试可能会改变另一个的状态。 – 2013-03-05 19:20:35

+1

闻起来就像一个测试隔离失败,因为当一个测试依赖于另一个测试的副作用时被调用,因此要求它们按特定顺序运行。 – 2013-03-05 21:22:53

回答

7

有JUnit中没有错误!我们的团队经历了类似的结果,这是由不正确的资源管理造成的。您可以尝试重命名失败的测试,以便首先执行它们。他们现在应该变成绿色,这主要是测试之间偶然分享资源的一个信号。在这种情况下,您可以尝试释放资源(@After)。 这里有一个小清单,以查找原因:

  • 有没有线程的生存测试?
  • 是否所有执行程序都关闭并终止?
  • 测试后文件或流仍然打开吗?
  • 测试后,Test-class中的所有字段是否清除/重新初始化?
  • 避免使用静态引用或单例
  • 不要在测试方法中释放资源,只能在拆卸方法中使用。否则,一个异常可能会使这段代码无法访问。
相关问题