是否可以重置JUnit测试?

时间:2014-11-13 18:42:06

标签: java junit

在测试开始时,我有一个包含项目的数组列表,在我的测试中我添加了更多项目,然后在不同的测试中我清除了数组。现在在我的第三次测试中,我希望在@Before阶段之前访问数组 - 在任何测试运行之前。

是否可以这样做或者我是否必须为此单独执行测试文件?

2 个答案:

答案 0 :(得分:1)

您的问题可能是填充@Before中的列表但不创建新实例。

**错误的方式**

 private List<String> value = new ArrayList<String>();

 @Before
 public void setup(){
    // add stuff to list
 }

在上文中,所有测试都使用相同的列表实例,因此其他测试将会看到修改。

**正确的方式**

 private List<String> value;

 @Before
 public void setup(){
    value = new ArrayList<String>();
    // add stuff to list
    // or you could clean the list then populate
 }

上述方法,每个测试都有一个新列表,因此测试之间没有可能的交互。

答案 1 :(得分:0)

记住一个重要的Junit测试原则:每个单元测试都是独立的。。这意味着你以不同的顺序运行哪些测试并不重要,它们应该总是通过。

那么该怎么办?

如果你有一个填充数组列表的@Before方法,那么在这个方法之外声明这个数组列表:

private List<String> myList = new ArrayList<String>(); 

@Before
public void myMethod(){
// do something, fill your list, etc.
}

因此,如果您需要在测试中修改此数组列表,那么您应该在每个数组中都拥有此数组列表的副本。请记住,正如我之前所说的,测试应该通过,无论它们执行的顺序是什么,所以你不应该假设一个测试将删除东西,以便另一个可以启动。唯一确定的是@Before方法将在其他所有方法之前运行。

@Test
public void myTest() {
List<String> myCopyList = new ArrayList<String>(myList);
//work with your copy
}

这将保证您不会修改方法之外的列表!并且每个测试都将以相同的数据开始。

干杯