1

我有以下测试将用户添加到列表中:

@Test
public void testTheSizeOfUserListAfterAddingThreeUsers() {
    User james = new User(001, "JamesBond", "JB007", "Admin");
    User billy = new User(002, "BillyBob", "WOOHOONASCAR", null);
    User jane = new User(003, "CaliGurl88", "surfboardz", null);
    manager.addUser(james);
    manager.addUser(billy);
    manager.addUser(jane);
    assertEquals(3, manager.getSize());
    manager.removeUser(james);
    manager.removeUser(billy);
    manager.removeUser(jane);
}

但是,我必须在每次测试后删除每个用户,以便为下一次测试重新开始。

无论如何我可以使用@After注释来删除为每个测试创建的所有用户吗?也许使用 for 循环?

4

3 回答 3

2

一个测试不能对另一个测试有任何影响。最安全的解决方案是在每次测试时重新创建manager对象。@Before

public class MyTest{

    private Manager manager;

    @Before
    public void setUp(){
        manager = new Manager();
    }

    ...

}

但是,如果您确实需要在所有测试中使用相同的实例,请确保您创建了一个非常好的清理方法 ( @After)。

于 2013-06-06T13:25:13.700 回答
1

将测试对象存储在 List 中,然后删除:

public class TestClass{

    private List<User> createdUsers = new ArrayList<>();

    private Manager manager; //instantiate

    @Before
    public void setupUsers(){
        User james = new User(001, "JamesBond", "JB007", "Admin");
        User billy = new User(002, "BillyBob", "WOOHOONASCAR", null);    
        User jane = new User(003, "CaliGurl88", "surfboardz", null);
        createdUsers.add(james);
        createdUsers.add(billy);
        createdUsers.add(jane);
    }

    @After
    public void cleanUsers(){
        for(User createdUser : createdUsers){
            manager.removeUser(createdUser); //but if you test the behaviour of manager, then remove the created instances independently from manager
        }
        createdUsers.clear();
    }
}
于 2013-06-06T13:22:27.027 回答
0

注释与将在每次测试后执行的@After方法一起使用。在这种方法中,你可以做任何你想做的事情来清理你的测试环境。

@After
public void cleanup() {
    // Cleaning code goes here
}

您可以使用所需的名称作为方法名称。

您可以将 User 实例保存在List<User>测试类的 , 属性中,然后在@After方法中删除它们。将用户从列表中删除后,不要忘记将其从您的列表中List删除。manager

public class MyTestClass {

private List<User> users = new ArrayList<User>();

@Test
public void testTheSizeOfUserListAfterAddingThreeUsers() {
    User james = new User(001, "JamesBond", "JB007", "Admin");
    User billy = new User(002, "BillyBob", "WOOHOONASCAR", null);
    User jane = new User(003, "CaliGurl88", "surfboardz", null);
    manager.addUser(james);
    manager.addUser(billy);
    manager.addUser(jane);
    users.add(james);
    users.add(billy);
    users.add(jane);
    assertEquals(3, manager.getSize());
}

@After
public void cleanup() {
    for (User user : users) {
        manager.removeUser(user);
    }
    users.clear();
}
}
于 2013-06-06T13:17:41.300 回答