【问题标题】:Stop Tests on first Failure with Maven/JUnit/Spring使用 Maven/JUnit/Spring 在第一次失败时停止测试
【发布时间】:2011-12-09 04:52:32
【问题描述】:

我希望 Maven 在遇到第一个错误时停止尝试运行我的 JUnit Spring 测试。这可能吗?

我的测试类如下所示,我将它们作为标准 Maven 目标运行。

@ContextConfiguration(locations = {"classpath:/spring-config/store-persistence.xml","classpath:/spring-config/store-security.xml","classpath:/spring-config/store-service.xml", "classpath:/spring-config/store-servlet.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class SkuLicenceServiceIntegrationTest
{
...

如果 Spring 配置中有错误,那么每个测试都会尝试重新启动 Spring 上下文,这需要 20 秒。这意味着我们很长时间都不会发现任何测试失败了,因为它会在得出构建失败的结论之前尝试运行所有测试!

【问题讨论】:

标签: spring maven junit jenkins surefire


【解决方案1】:

这更像是一个评论,而不是一个答案,但是,也许你会发现它很有用。

我建议将您的集成测试分成一个单独的阶段,并使用 Failsafe 而不是 Surefire 运行它们。通过这种方式,您可以决定是只需要运行快速单元测试,还是需要运行完整的包含长时间运行的集成测试:

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>integration-test</id>
                    <goals>
                        <goal>integration-test</goal>
                    </goals>
                </execution>
                <!-- Uncomment/comment this in order to fail the build if any integration test fail -->
                <execution>
                    <id>verify</id>
                    <goals><goal>verify</goal></goals>  
                </execution>
            </executions>
        </plugin>
    </plugins>

解决您的问题的方法可能是将测试单独执行并首先运行它;这样执行将失败,并且不会启动后续的surefire/failsafe执行。见how to configure the plugin to do it。

【讨论】:

  • 至少在 Maven 2.2.1 中,似乎通过单独执行故障安全,第一次执行失败并不会阻止第二次执行运行。
猜你喜欢
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2021-03-19
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多