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

时间:2011-07-11 23:12:14

标签: java unit-testing testing junit

我对JUnit测试有疑问。

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

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

我们遇到的问题是,当后续测试运行时,它们会受到之前测试的影响,因此可能(并且可能)我们会出现误报或无效的故障。

是否有办法维护JUnit测试的测试顺序,但是让它重新初始化整个系统,就好像从头开始在系统上进行测试一样。

我们能想到的唯一选择是编写一个执行此操作的方法,并在每次测试结束时调用它,但由于有很多东西需要以这种方式重置,我希望在那里这是一种更简单的方法。

3 个答案:

答案 0 :(得分:3)

我已经多次看到测试问题,他们彼此依赖(有时是故意的!)。

首先,您需要设置setUp方法:

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

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

测试的顺序通常是它们在测试类中的顺序。但是永远不应该假设这一点,并且在此基础上编写代码是一个非常糟糕的主意。

返回documentation。如果您需要更多信息。

答案 1 :(得分:0)

我对这种问题采取的方法是在每次测试之前进行部分重新初始化。每个测试都知道它需要的前提条件,并且设置确保它们是真的。不确定这是否与您相关。依靠订单往往最终成为一个持续的PITA - 能够自己运行测试更好。

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

答案 2 :(得分:0)

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

@Test
public void f1() {}

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