微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

测试通过,误报

如何解决测试通过,误报

我的测验得到假阳性。我正在寻找密钥“ 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,"Report Title not found.");
        }}}

解决方法

您遍历pairs映射中的每个条目,然后:

  1. 如果条目的键为"1234",请检查该值(注:您正在调用值keyValue?您需要更好的命名技巧,mate: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".
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。