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

1 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") }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ell 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") }
}
Run Code Online (Sandbox Code Playgroud)

您正在使用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允许用户选择测试类中方法的执行顺序.