[英]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
映射中的每個條目,然后:
"1234"
,則檢查該值(旁注:您正在調用值keyValue
?您需要更好的命名技巧,伙伴:P)是否等於某個特定的東西。 如果是,那太好了。 如果沒有,則失敗。"1234"
,我們繼續循環。 只有鍵為"1324"
任何條目才會導致任何實際代碼運行。因此,正如您所說,沒有鍵 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.