我有一组遗留单元测试,其中大部分是 Spring AbstractTransactionalJUnit4SpringContextTests
测试,但有些会自行管理事务。不幸的是,这似乎引入了副作用,导致在修改测试数据集时完全不相关的测试失败,即失败的测试在单独运行时有效(使用相同的初始数据集),但在运行时失败完整测试集的一部分。
测试通常在常规 Maven 构建期间通过 Maven 的 surefire 插件运行。
我正在寻找的是一种自动排列已执行测试的数量和顺序以找出罪魁祸首的方法。一种朴素但相当昂贵的方法是采用所有测试的幂集并运行所有可能的组合。一种更优化的方法将使用现有的测试执行顺序(大部分是随机的,但稳定的)并测试所有潜在的有序子集。我知道此过程的运行时间可能很长。
是否有任何工具/Maven 插件可以开箱即用?
最佳答案
我不知道有什么工具可以满足您的需求,但您可以尝试使用 runOrder parameter in maven surefire .从该页面:
Defines the order the tests will be run in. Supported values are "alphabetical", "reversealphabetical", "random", "hourly" (alphabetical on even hours, reverse alphabetical on odd hours), "failedfirst", "balanced" and "filesystem".
Odd/Even for hourly is determined at the time the of scanning the classpath, meaning it could change during a multi-module build.
所以你可以做一个简单的按字母顺序排列的 runOrder 并接受第一个失败,然后从那里开始。至少你有一个可预测的运行顺序。然后,您在失败的测试和失败的测试之前逐一运行(使用 -Dincludes)每个测试,以检测是哪个测试导致失败的测试失败。
然后对所有失败的测试重复整个过程。你可以在一夜之间循环运行它。
关于java - 自动确定 Junit 测试副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683081/