使用 JUnit 和 Mockito 测试方法以增强分支覆盖率

Testing a method with JUnit and Mockito to enhance branch coverage

我正在写一个JUnit来增强方法的行和分支覆盖。我试图覆盖的被测方法中只剩下一行,但不知何故没有被覆盖。我尝试使用 Mockito 使其更简单,但 if( o != null )Cobertura 报告中仍然显示为红色。

正在测试的方法:

public String handleParams( Map<String, Object> params ) {
    StringBuilder sb = new StringBuilder();

    if( params != null ) {
        Set<String> keys = params.keySet();
        for( String s : keys ) {
            Object o = params.get( s );
            if( o != null ) {
                if( sb.length() > 0 ) {
                    sb.append("," );
                }
                sb.append( s + "-" + o.toString() );
            }
        }
    }

    return sb.toString();
}

JUnit 测试:

@Test
public void testHandleParams() throws Exception {
    Map<String, Object> params = new HashMap<>();
    params.put("Object1", new Object());
    params.put("Object2", new Object());

    TestWSAuditHandler handler = new TestWSAuditHandler();
    String handle = handler.handleParams(params);

    assertNotNull(params);
    assertEquals(2, params.size());
    assertTrue(handle instanceof String);

    // Null Condition
    params = null;

    handler = new TestWSAuditHandler();
    handle = handler.handleParams(params);

    assertNull(params);
    assertEquals(null, params);
    assertTrue(handle instanceof String);

    // Mocking params
    params = Mockito.mock(Map.class);
    Mockito.when(params.get(Mockito.anyString())).thenReturn(null);

    handler = new TestWSAuditHandler();
    handle = handler.handleParams(params);
}

想知道我将如何使 o == null

提前致谢

怎么样:

params.put("Object3", null);

在您致电 handleParams 之前?

这样,当您在 handleParams 中调用 params.get("Object3") 时,您将获得与键 Object3 关联的值,在本例中为 null