为什么这会给我AssertationError?

时间:2014-01-14 07:48:29

标签: java junit

我有以下测试:

@Test
    public void deleteUser(){

        User user = new User("admin","admin");
        service.createUser(user);
        service.deleteUser(1);

        assertTrue("Check that user is deleted: ", user.getId() < 1);

    }

但它给了我AssertationError。 为什么我不这样做? 我创建了我的用户,然后想测试我能删除新创建的用户。

我的删除方法只是从用户的哈希映射中删除。

Map<Long, User> users = new HashMap<Long, User>();
    protected static long nextId = 0;

@Override
    public long createUser(User user) {

        user.setId(getNextId());
        users.put(user.getId(), user);

        return user.getId();
    }

    @Override
    public void deleteUser(long id) {

        users.remove(id);

    }

有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:1)

除了访问User对象之外,您仍然可以引用(无论是否删除),您应该实现一种方法,检查用户是否存在于服务变量的类中:

public boolean containsUser(long userId) {
    return users.containsKey(userId);
}

然后如此断言:

assertFalse("Check that user is deleted: ", service.containsUser(1L));

答案 1 :(得分:0)

当您从Map删除用户时,您对user.id不执行任何操作。这就是你的断言失败的原因。

删除时更改ID的一种方法

@Override
public void deleteUser(long id) {
    User deletedUser = users.remove(id);
    deletedUser.setId(-1);
}

另一种(也是更好的)方式是改变测试:

@Test
public void deleteUser(){
    User user = new User("admin","admin");
    long id = service.createUser(user);
    service.deleteUser(id);

    assertFalse("Check that user is deleted: ", service.hasUser(id));
}

答案 2 :(得分:0)

您的测试没有任何意义 - 您要检查用户是否已从服务中删除,而是检查用户对象的Id属性的值(该值为null,或设置为某个值 - 你没有提供任何代码)。正如一些用户已经建议的那样,您需要检查用户是否实际包含在您的服务中。另外,你在getNextId()方法中做了什么吗?如果这只是你的nextId变量的getter,你创建的每个用户都会将Id设置为0(但也许你想要那样,谁知道)。 getNextId中是否有一些代码实际上将值设置为其他内容?