簡體   English   中英

測試以假陽性通過

[英]Test passes with a False-Positive

我的測試出現誤報。 我正在尋找密鑰“1234”,我知道它不存在,但測試仍然通過。

我有一個 MAP 方法(reportUIDsAndTitles),它存儲一堆 UID 和標題的鍵和值。 我的測試循環遍歷這些鍵,如果發現它斷言標題與鍵匹配。 但是在下面的代碼中,如果沒有找到密鑰,測試仍然通過。

我該如何解決? 我已經驗證我的 MAP 方法有效並且循環有效,但不確定如何設置失敗。

@Test
public void apiTitleOfReport() {
    Map<String, String> pairs;
    pairs = reportUIDsAndTitles();

    for (Map.Entry pairEntry : pairs.entrySet()) {
        if (pairEntry.getKey().equals("1234")) {
            String keyValue = (String) pairEntry.getValue();
            assertEquals(keyValue, "Name of title I am looking for", "Report Title not found.");
        }}}

******* 這是我更新后的代碼,如建議的那樣,在 IF 塊之前缺少 Assert。 現在,如果密鑰不存在,則失敗。 但如果它確實存在,代碼會繼續並檢查標題是否正確。 謝謝大家的建議。

@Test
public void apiTitleOfReport() {
    Map<String, String> pairs;
    pairs = reportUIDsAndTitles();
    assertTrue(pairs.containsKey("1234"));
    

for (Map.Entry pairEntry : pairs.entrySet()) {
        if (pairEntry.getKey().equals("1234")) {
            String key = (String) pairEntry.getValue();
            assertEquals(key, "Name of title I am looking for", "Report Title not found.");
        }}}

您遍歷pairs映射中的每個條目,然后:

  1. 如果條目的鍵是"1234" ,則檢查該值(旁注:您正在調用值keyValue ?您需要更好的命名技巧,伙伴:P)是否等於某個特定的東西。 如果是,那太好了。 如果沒有,則失敗。
  2. 就是這樣 - 如果條目的鍵不完全是"1234" ,我們繼續循環。 只有鍵為"1324"任何條目才會導致任何實際代碼運行。
  3. 就是這樣。 沒有#3。

因此,正如您所說,沒有鍵 1234 的條目,因此您的代碼什么也不做。

如何解決? 你的問題不清楚意圖。 一種方法可能是:

@Test
public void ensure1234IsNotInTheMap() {
    assertFalse(map.containsKey("1234"));
}

也許:

@Test
public void ensure1234IsMappedToFOOBAR() {
    assertEquals("FOOBAR", map.get("1234"));
    // if 1234 isn't in the map at all, the map.get op
    // returns null, and thus your test will properly fail,
    // as null is not equal to "FOOBAR".
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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