Dav*_*ave 1 junit integration-testing maven maven-failsafe-plugin
我正在使用Maven 3.0.3,Failsafe插件v2.17和JUnit 4.11。目前,我有一个集成测试,测试顺序如下
@RunWith(SpringJUnit4ClassRunner.class)
public class MyTests {
@Test
public final void testAdd() {
…
}
@Test
public final void testUpdate() {
…
}
@Test
public final void testDelete() {
…
}
Run Code Online (Sandbox Code Playgroud)
目前,当我作为“ mvn全新安装”运行的一部分通过Maven运行测试时,在“ testAdd”或“ testUpdate”之前先运行“ testDelete”。如果我将名称更改为“ testZZZDelete”,那么它将最后运行,但我不喜欢这样。
如何使测试按照文件中指定的顺序运行?我的故障安全配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.17</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
简短的回答:不,除了重命名测试之外,别无他物,以便它们按顺序执行。您可以使用@FixMethodOrder(NAME_ASCENDING)注释,以确保测试是按字母顺序执行。
长答案:我确定您知道,surefire / failsafe提供了通过runOrder配置参数对测试类进行排序的选项。这控制了每个测试类的执行顺序。因此,您可以在foobar.Test2之前运行类foobar.Test1,反之亦然。
对于类中方法的执行顺序,您面临的问题是JVM不会以文件中声明的顺序返回方法列表。在Java 6中,返回它们的顺序通常是声明的顺序,但是在Java 7中却有所改变。因此,随着JUnit 4.11的发布,默认顺序已更改为基于方法名称的哈希,给出确定性但不可预测的排序。这就是为什么要先运行testDelete的原因。
经过长时间的讨论,我们在FixMethodOrderJUnit 4.11中添加了注释,以使某人至少能够重命名其方法。这似乎适用于SpringJUnit4ClassRunner-至少适用于最新版本4.1.0.RELEASE。我没有尝试过其他版本。
因此,要获得可预测的顺序,可以在必要时重命名要按所需顺序执行的方法,并将@FixMethodOrder注释添加到类中。
@RunWith(SpringJUnit4ClassRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTests {
@Test
public final void step1Add() {
…
}
@Test
public final void step2Update() {
…
}
@Test
public final void step3Delete() {
…
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见JUnit4是否开始支持测试顺序?这是故意的吗?。
| 归档时间: |
|
| 查看次数: |
4667 次 |
| 最近记录: |