在测试开始时,我有一个包含项目的数组列表,在我的测试中我添加了更多项目,然后在不同的测试中我清除了数组。现在在我的第三次测试中,我希望在@Before阶段之前访问数组 - 在任何测试运行之前。
是否可以这样做或者我是否必须为此单独执行测试文件?
答案 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
}
这将保证您不会修改方法之外的列表!并且每个测试都将以相同的数据开始。
干杯