【发布时间】:2021-01-03 18:16:19
【问题描述】:
我的测试出现误报。我正在寻找密钥“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.");
}}}
【问题讨论】:
-
它通过了,因为如果你不输入
if块,你就不会断言任何东西。没有断言意味着自动通过。 -
谢谢!这就是我所缺少的。我认为通过将我的 assertEquals 放在 IF 块中,它会在那里捕捉到它......错误。所以,我在 For 循环之前添加了这一行:assertTrue(pairs.containsKey("1234"));
标签: java loops false-positive