我有以下测试:
@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);
}
有人可以向我解释一下吗?
答案 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中是否有一些代码实际上将值设置为其他内容?