代码之家  ›  专栏  ›  技术社区  ›  user5192032

如何使用JUnit在Java中测试布尔返回类型的方法

  •  6
  • user5192032  · 技术社区  · 8 年前

    我正在写一个 JUnit 获取Line and Branch覆盖率的方法的测试用例。测试中的方法调用另一个类型的方法 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() ?

    谢谢

    1 回复  |  直到 8 年前
        1
  •  4
  •   Blake Yarbrough    8 年前

    您可以定义一个mock,然后在以下情况下强制值返回true getLoggingHandler().isGeneralDebugEnabled() 被称为

    下面是代码中的内容:

    @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());
    }