gpt4 book ai didi

java - 在 JUnit 中,如何获取所有集成测试的列表?

转载 作者:行者123 更新时间:2023-12-04 04:51:37 25 4
gpt4 key购买 nike

我的集成测试按顺序运行,但我想并行化它们。问题是,他们都设置和拆除了同一个数据库行,所以如果他们并行运行,当另一个测试清理时,他们的数据会在他们中间消失。

我计划通过这样做来改变这一点,以便每个测试都设置并拆除每个测试的唯一行,这样它们就不会相互干扰。我通过将每个测试的 id 转换为同名常量来启动该过程,例如 ROW_ID .但是我们有很多测试,很容易错过其中一个,我也不希望人们添加重复的 ROW_ID值,所以我认为为我的测试编写测试可能是个好主意。

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

如果有更好的方法来完成我正在尝试做的事情,请务必将其作为答案。

最佳答案

关于唯一行 ID 问题,您有很多不同的选择:

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

  • .
    public class SequenceNumberGenerator {  

    private static AtomicInteger counter = new AtomicInteger();

    public static int nextVal() {
    return counter.incrementAndGet();
    }
    }

    我也不会在每个测试类中创建一个常量 ROW_ID(以避免重复)。相反,我认为您可以在父类(super class)上定义它(所有集成测试都会对其进行扩展),在测试执行之前设置它的值,然后简单地为它提供一个 getter 访问器。像这样的东西:
    //superclass
    private int rowId;

    @Before
    public void generateRowId() {
    rowId = SequenceNumberGenerator.nextVal();
    }

    protected int getRowId() {
    return rowId;
    }

    关于java - 在 JUnit 中,如何获取所有集成测试的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353936/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com