我的集成测试按顺序运行,但我希望将它们并行化。问题是,它们都设置并拆除了相同的数据库行,所以如果它们并行运行,当另一个测试清理时,它们的数据会在它们中间消失。
我计划通过这样做来改变这一点,以便每次测试都设置并撕下每个测试的唯一行,这样它们就不会相互干扰。我已经开始这个过程,将每个测试的id转换为同名的常量,如ROW_ID
。但是我们已经进行了很多测试,并且很容易错过其中一个,我也不希望人们在将来添加重复的ROW_ID
值,所以我认为这可能是一个好主意为我的测试编写测试。
以下是我想象它的工作方式:迭代所有IntegrationTest类,使用反射获取其ROW_ID
字段的值,将其放入数据结构中,然后检查重复项。我的问题是我不知道如何迭代所有IntegrationTest类。它们都有一个共同的命名模式“* IntegrationTest”。有人可以帮助我这一步吗?
如果有更好的方法来完成我正在尝试做的事情,请务必将其作为答案给我。
答案 0 :(得分:2)
关于唯一行ID问题,您有很多不同的选项:
public class SequenceNumberGenerator {
private static AtomicInteger counter = new AtomicInteger();
public static int nextVal() {
return counter.incrementAndGet();
}
}
我也不会在每个测试类中创建一个常量ROW_ID(以避免重复)。相反,我认为您可以在超类上定义它(可以通过所有集成测试进行扩展),在测试执行之前设置它的值,并为它提供一个getter访问器。像这样:
//superclass
private int rowId;
@Before
public void generateRowId() {
rowId = SequenceNumberGenerator.nextVal();
}
protected int getRowId() {
return rowId;
}
答案 1 :(得分:1)