[英]Why is this giving me AssertationError?
我有以下測試:
@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);
}
有人可以向我解釋嗎?
您仍然可以引用(獨立於是否刪除)來訪問User
對象,而不是訪問User
對象,而是應該實現一個方法,該方法檢查用戶是否存在於您的服務變量的類中:
public boolean containsUser(long userId) {
return users.containsKey(userId);
}
然后像這樣斷言:
assertFalse("Check that user is deleted: ", service.containsUser(1L));
當您從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));
}
您的測試沒有任何意義-您想檢查用戶是否已從服務中刪除,而是要檢查用戶對象的Id屬性值(它為null或設置為某個值)-您沒有提供任何代碼)。 正如某些用戶已經建議的那樣,您需要檢查該用戶是否確實包含在您的服務中。 另外,您是否正在getNextId()方法內做某事? 如果這只是您nextId變量的獲取方法,那么您創建的每個用戶都將ID設置為0(但您可能會那樣想,誰知道呢)。 getNextId中是否有一些代碼實際上將值設置為其他值?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.