Java 在JUnit中,如何获得所有集成测试的列表?
我的集成测试按顺序运行,但我想将它们并行化。问题是,它们都设置和拆除同一数据库行,所以如果它们并行运行,当另一个测试清理时,它们的数据将在中间使用。 我计划改变这一点,使每个测试都能设置并在每个测试中删除一行,这样它们就不会相互干扰。我通过将每个测试的id转换为相同名称的常量开始了这个过程,如Java 在JUnit中,如何获得所有集成测试的列表?,java,maven,junit,integration-testing,junit4,Java,Maven,Junit,Integration Testing,Junit4,我的集成测试按顺序运行,但我想将它们并行化。问题是,它们都设置和拆除同一数据库行,所以如果它们并行运行,当另一个测试清理时,它们的数据将在中间使用。 我计划改变这一点,使每个测试都能设置并在每个测试中删除一行,这样它们就不会相互干扰。我通过将每个测试的id转换为相同名称的常量开始了这个过程,如ROW\u id。但是我们有很多测试,很容易错过其中一个,我也不希望人们在将来添加重复的ROW\u ID值,所以我想为我的测试编写一个测试可能是个好主意 我想象它是这样工作的:迭代所有Integration
ROW\u id
。但是我们有很多测试,很容易错过其中一个,我也不希望人们在将来添加重复的ROW\u ID
值,所以我想为我的测试编写一个测试可能是个好主意
我想象它是这样工作的:迭代所有IntegrationTest类,使用反射获取它们的行ID
字段的值,将其放入数据结构中,然后检查重复项。我的问题是我不知道如何迭代所有的IntegrationTest类。它们都有一个共同的命名模式“*IntegrationTest”。有人能帮我走那一步吗
如果有更好的方法来完成我想做的事情,请务必给我一个答案 您可以使用JUnit类别。阅读网页,或许也可以。还有其他一些框架允许更好的过滤(按包/包括子包/包括那些以x/etc开头的),但我记不起它的名字了。。。但是,我认为您需要的是简单的@Categories。对于唯一的行id问题,您有很多不同的选项:
//superclass
private int rowId;
@Before
public void generateRowId() {
rowId = SequenceNumberGenerator.nextVal();
}
protected int getRowId() {
return rowId;
}
与其手动提供行ID,不如改用数据库序列?@MarlonBernardes这是个好主意。也许我可以这样做,或者创建一个线程安全的方法,增加并返回一个id计数器。类似于
Long row\u id=SequenceNumberGenerator.nextVal()
@MarlonBernardes的东西如果你把这个作为答案,我会投它一票up@MatthewFarwell完成!你指的是TestNG吗?另外,这看起来是朝着正确方向迈出的一步,但我不知道如何使用类别来获取类别中测试的实例/类。好的,我查了一下,框架被调用了。我没有亲自使用过,但我的同事说这是有史以来最好的东西。正如您将在网页中看到的,您可以根据任何可能的标准进行筛选,例如,甚至可以通过*IntegrationTest进行筛选
//superclass
private int rowId;
@Before
public void generateRowId() {
rowId = SequenceNumberGenerator.nextVal();
}
protected int getRowId() {
return rowId;
}