2014-01-14 30 views
0

我有以下测试:为什么这会给我As thesisError?

@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。 为什么我不能这样做? 我创建了我的用户,然后想测试我能够删除新创建的用户。

我的删除方法只是从用户的hashmap中删除。

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

谁知道?你没有发布任何'getId()'。 –

+0

检查assertEquals的文档,检查用户对象并执行一些调试会话。很简单,你可以自己实现它。 –

回答

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)); 
} 
1

不是访问User对象,你仍然有参考(不管它是否被删除),你应该实现一个方法,检查用户是否存在于你的服务变量的类中:

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

然后断言,像这样:

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

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

相关问题