簡體   English   中英

為什么這會給我AssertationError?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM