有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何处理相互依赖的JUnit测试?

我有一个关于JUnit测试的问题

我们的JUnit套件正在测试我们编写的与内存系统交互的各种函数

我们系统的设计方式要求它是静态的,因此在运行测试之前进行初始化

我们所面临的问题是,当后续测试运行时,它们会受到之前测试的影响,因此我们可能(而且很可能)得到误报,或者准确的失败

有没有办法维持JUnit测试的测试顺序,但让它重新初始化整个系统,就像从头开始在系统上测试一样

我们能想到的唯一选择是编写一个方法来实现这一点,并在每次测试结束时调用它,但由于有很多事情需要以这种方式重置,我希望有一种更简单的方法来实现这一点


共 (3) 个答案

  1. # 1 楼答案

    我处理这类问题的方法是在每次测试之前进行部分重新初始化。每个测试都知道它需要的前提条件,并且设置确保它们是真实的。不确定这是否与你有关。依赖顺序往往最终成为一个持续的PITA——能够自己运行测试更好

    哦,是的,有一个“测试”是作为负责静态初始化的套件的开始运行的

  2. # 2 楼答案

    我多次看到测试中存在相互依赖的问题(有时是故意的!)

    首先,您需要设置一种设置方法:

    @Before
    public void setUp() {
        super.setUp();
        // Now clear, reset, etc all your static data.
    }
    

    这在每次测试之前由JUnit自动运行,并将重置环境。您也可以在之后添加一个,但为了确保一个干净的起点,在之前更好

    测试的顺序通常是测试类中的顺序。但这永远都不应该被假设,基于这一点编写代码是一个非常糟糕的想法

    回到documentation。如果你需要更多的信息

  3. # 3 楼答案

    您可能想看看TestNG,它支持此类功能测试的测试依赖项(JUnit是一个单元测试框架):

    @Test
    public void f1() {}
    
    @Test(dependsOnMethods = "f1")
    public void f2() {}