测试通过,误报

问题描述

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...