Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JUnit中,如何获得所有集成测试的列表?_Java_Maven_Junit_Integration Testing_Junit4 - Fatal编程技术网

Java 在JUnit中,如何获得所有集成测试的列表?

Java 在JUnit中,如何获得所有集成测试的列表?,java,maven,junit,integration-testing,junit4,Java,Maven,Junit,Integration Testing,Junit4,我的集成测试按顺序运行,但我想将它们并行化。问题是,它们都设置和拆除同一数据库行,所以如果它们并行运行,当另一个测试清理时,它们的数据将在中间使用。 我计划改变这一点,使每个测试都能设置并在每个测试中删除一行,这样它们就不会相互干扰。我通过将每个测试的id转换为相同名称的常量开始了这个过程,如ROW\u id。但是我们有很多测试,很容易错过其中一个,我也不希望人们在将来添加重复的ROW\u ID值,所以我想为我的测试编写一个测试可能是个好主意 我想象它是这样工作的:迭代所有Integration

我的集成测试按顺序运行,但我想将它们并行化。问题是,它们都设置和拆除同一数据库行,所以如果它们并行运行,当另一个测试清理时,它们的数据将在中间使用。 我计划改变这一点,使每个测试都能设置并在每个测试中删除一行,这样它们就不会相互干扰。我通过将每个测试的id转换为相同名称的常量开始了这个过程,如
ROW\u id
。但是我们有很多测试,很容易错过其中一个,我也不希望人们在将来添加重复的
ROW\u ID
值,所以我想为我的测试编写一个测试可能是个好主意

我想象它是这样工作的:迭代所有IntegrationTest类,使用反射获取它们的
行ID
字段的值,将其放入数据结构中,然后检查重复项。我的问题是我不知道如何迭代所有的IntegrationTest类。它们都有一个共同的命名模式“*IntegrationTest”。有人能帮我走那一步吗


如果有更好的方法来完成我想做的事情,请务必给我一个答案

您可以使用JUnit类别。阅读网页,或许也可以。还有其他一些框架允许更好的过滤(按包/包括子包/包括那些以x/etc开头的),但我记不起它的名字了。。。但是,我认为您需要的是简单的@Categories。

对于唯一的行id问题,您有很多不同的选项:

  • 使用数据库序列,而不是手动设置ID
  • 实现一个线程安全计数器并将其用作行ID(参见下面的示例)

    我也不会在每个测试类中创建一个常量ROW_ID(以避免重复)。相反,我认为您可以在一个超类(所有集成测试都会扩展)上定义它,在测试执行之前设置它的值,并为它提供一个getter访问器。大概是这样的:

    //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;
    }