2016-05-11 2 views
5

Я пишу тестовый пример JUnit для метода получения покрытия Line и Branch. Метод под тестированием вызывает другой метод типа Boolean, и я не могу покрыть эту часть, потому что в сообщении Cobertura показана следующая красная.Как протестировать метод с логическим типом возвращаемого значения в Java с помощью JUnit

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()?

Спасибо,

ответ

3

Вы можете определить макет, а затем заставить значение вернуться верно, когда 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()); 
} 
+1

Ты потрясающий Блейк. Мокито помог мне, и теперь он покрыт. Огромное спасибо. –

Смежные вопросы