【问题标题】:How to test a Method with a Boolean return type in Java with JUnit如何使用 JUnit 在 Java 中测试具有布尔返回类型的方法
【发布时间】:2016-09-07 06:13:01
【问题描述】:

我正在编写一个JUnit 测试用例,用于获取线路和分支覆盖率。被测方法调用Boolean 类型的另一种方法,我无法涵盖该部分,因为在Cobertura 报告中,以下行显示为红色。

if (getLoggingHandler().isGeneralDebugEnabled())

待测方法:

public void logMethodEndDebug(ILoggable l, String c, String m, String msg, Object... args) {

    if (getLoggingHandler().isGeneralDebugEnabled()) {
        String cf = ComponentUtils.createControlFrag(l, c);
        StringBuilder sb = new StringBuilder(cf);
        sb.append(m + StringConstants.SPACE + LogConstants.END);
        sb.append(StringConstants.BRACE_OPEN + String.format(msg, args) + StringConstants.BRACE_CLOSE);
        getLoggingHandler().handleGeneralDebug(sb.toString());
    }

}

JUnit 测试:

@Test
public void testLogMethodStartDebug() throws Exception {
    String var1 = "var1";
    String var2 = "var2";
    String var3 = "var3";
    Object[] object = new Object[] {"var4"}; 

    BaseComponent baseComponent = new BaseComponent();
    baseComponent.setLoggingHandler(new TestLoggingHandler());

    ILoggable loggable = new ServiceContext();

    baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);

    assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}

有什么办法可以掩盖这个getLoggingHandler().isGeneralDebugEnabled()

谢谢,

【问题讨论】:

    标签: java unit-testing junit cobertura


    【解决方案1】:

    您可以定义一个模拟,然后在调用getLoggingHandler().isGeneralDebugEnabled() 时强制该值返回true

    这是代码中的样子:

    @Mock
    private TestLoggingHandler mockLoggingHandler;
    
    ...
    
    @Test
    public void testLogMethodStartDebug() throws Exception {
        String var1 = "var1";
        String var2 = "var2";
        String var3 = "var3";
        Object[] object = new Object[] {"var4"}; 
    
        when(mockLoggingHandler.isGeneralDebugEnabled()).thenReturn(true);
    
        BaseComponent baseComponent = new BaseComponent();
        baseComponent.setLoggingHandler(mockLoggingHandler);
    
        ILoggable loggable = new ServiceContext();
    
        baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
    
        assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
    }
    

    或者,如果generalDebugEnabled 的设置器可用,您可以执行以下操作:

    @Test
    public void testLogMethodStartDebug() throws Exception {
        String var1 = "var1";
        String var2 = "var2";
        String var3 = "var3";
        Object[] object = new Object[] {"var4"}; 
    
        BaseComponent baseComponent = new BaseComponent();
        baseComponent.setLoggingHandler(new TestLoggingHandler());
        baseComponent.getLoggingHandler().setGeneralDebugEnabled(true);
    
        ILoggable loggable = new ServiceContext();
    
        baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
    
        assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
    }
    

    【讨论】:

    • 你太棒了布莱克。 Mockito 帮助了我,现在它被覆盖了。非常感谢。
    猜你喜欢
    • 2021-11-11
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2011-11-28
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多