2

我有一组遗留单元测试,其中大部分是 SpringAbstractTransactionalJUnit4SpringContextTests测试,但有些是自己管理事务。不幸的是,这似乎引入了副作用,导致在修改测试数据集时完全不相关的测试失败,即失败的测试在单独运行时工作(使用相同的初始数据集),但在运行时失败整套测试的一部分。

测试通常在常规 Maven 构建期间通过 Maven 的 surefire 插件运行。

我正在寻找的是一种自动排列已执行测试的数量和顺序以找出罪魁祸首的方法。一种幼稚但相当昂贵的方法是采用所有测试的幂集并运行所有可能的组合。更优化的方法将使用现有的测试执行顺序(大部分是随机的,但稳定)并测试所有潜在的有序子集。我知道这个过程的运行时间可能很长。

有没有开箱即用的工具/ Maven 插件可以做到这一点?

4

2 回答 2

1

我不知道有什么工具可以专门满足您的需求,但是您可以使用maven surefire 中的 runOrder 参数。从该页面:

定义运行测试的顺序。支持的值是“alphabetical”、“reversealphabetical”、“random”、“hourly”(偶数小时的字母顺序,奇数小时的反向字母顺序)、“failedfirst”、“balanced”和“文件系统”。

每小时的奇数/偶数是在扫描类路径时确定的,这意味着它可能会在多模块构建期间发生变化。

所以你可以做一个简单的按字母顺序排列的 runOrder 并接受第一次失败,然后从那里开始。至少你有一个可预测的运行顺序。然后在失败的测试和失败的测试之前逐一运行(使用-Dincludes),以检测哪个测试导致失败的测试失败。

然后对所有失败的测试重复整个过程。你可以在一夜之间循环运行它或其他东西。

于 2012-03-13T12:44:37.403 回答
0

您可以简单地修改测试以每次使用干净的数据库副本吗?DBUnit 是执行此操作的绝佳工具。

http://www.dbunit.org/

于 2012-03-13T11:59:53.817 回答