2016-05-11 24 views
5

Piszę o teście testowym JUnit dla metody uzyskania zasięgu linii i gałęzi. Testowana metoda wywołuje inną metodę typu Boolean i nie mogę jej zakryć, ponieważ w raporcie Cobertura następujący wiersz pokazuje kolor czerwony.Jak przetestować metodę z typem powrotu typu Boolean w Javie z JUnit

if (getLoggingHandler().isGeneralDebugEnabled()) 

Metoda badanego:

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

} 

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

Czy istnieje jakiś sposób, aby pokryć ten getLoggingHandler().isGeneralDebugEnabled()?

Dzięki,

Odpowiedz

3

można zdefiniować mock a następnie zmuszają wartość wrócić prawdziwe, gdy getLoggingHandler().isGeneralDebugEnabled() nazywa

Oto, co to będzie wyglądać w kodzie:

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

przemian jeśli program ustawiający dla generalDebugEnabled jest dostępny, możesz zrobić coś takiego:

@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

Jesteś niesamowity Blake. Mockito pomógł mi, a teraz jest zakryty. Dziękuję bardzo. –