@After注释在使用JUnit和JAVA 7时首先运行

时间:2013-08-16 06:23:40

标签: java junit

我们最近升级了 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") }
}

1 个答案:

答案 0 :(得分: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 begun supporting ordering of test? Is it intentional?的回答)。因此,当您升级到Java 7时,找到并执行方法的顺序发生了变化 - 并且首先执行了@After

有关此问题的更多背景信息,请参阅Sort test methods for predictabilitySortMethodsWith allows the user to choose the order of execution of the methods within a test class