1

我们最近在Java 7上进行了升级,但在那之后我们的套件面临着奇怪的问题,即它首先执行带有 @After 注释的方法,然后是带有 @Test 注释的方法。任何帮助将不胜感激。提前致谢

编辑:这是评论中的代码:

public class TestClasse extends TestCase {
  @Test public void testLogin(){ System.out.println("TestCase1");    }
  @Test public void testLogout(){ System.out.println("TestCase2");   }
  @After public void testGenerateReport(){ System.out.println("testCase3") }
}
4

1 回答 1

5

这是你的代码:

public class TestClasse extends TestCase {
@Test public void testLogin(){ System.out.println("TestCase1");  }
@Test public void testLogout(){ System.out.println("TestCase2");     }
@After public void testGenerateReport(){ System.out.println("testCase3") }
}

您正在使用 JUnit 3(因为您正在扩展 TestCase),因此 JUnit 正在运行所有以“test”开头的方法。

解决方案:不要扩展 TestCase,并确保您的类路径包含 JUnit 4(4.11 是最新的)。此外,为避免混淆,请勿将您的 @After 方法命名为 testXXX。

为什么升级到 Java 7 后它停止工作?

当您在 Java 6 及之前的版本中搜索方法时,在大多数情况下,JVM 按照它们在源文件中声明的顺序返回方法(在您的情况下为 testLogin、testLogout、testGenerateReport)。这在 Java 7 中发生了变化,因此方法以不同的不可预测的顺序返回(请参阅我对Has JUnit4 是否开始支持测试排序的回答?是故意的吗?)。因此,当您升级到 Java 7 时,查找和执行方法的顺序发生了变化——您的方法@After首先被执行。

有关此问题的更多背景信息,请参阅为可预测性排序测试方法,并且SortMethodsWith 允许用户选择测试类中方法的执行顺序

于 2013-08-16T07:24:10.480 回答