Frage So testen Sie eine Methode mit einem booleschen Rückgabetyp in Java mit JUnit


Ich schreibe ein JUnit Testfall für eine Methode, um eine Linien- und Zweigabdeckung zu erhalten. Die zu testende Methode ruft eine andere Methode vom Typ auf Boolean und ich kann diesen Teil nicht abdecken, weil auf der Cobertura melden Sie die folgende Zeile zeigt rot.

if (getLoggingHandler().isGeneralDebugEnabled())

Methode im Test:

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:

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

Gibt es eine Möglichkeit, dies zu erfassen? getLoggingHandler().isGeneralDebugEnabled()?

Vielen Dank,


5
2018-05-11 17:26


Ursprung


Antworten:


Sie können einen Schein definieren und dann erzwingen, dass der Wert wahr zurückgibt, wenn getLoggingHandler().isGeneralDebugEnabled() wird genannt

Hier ist, was das im Code aussehen würde:

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

Alternativ, wenn der Setter für generalDebugEnabled verfügbar ist, könnten Sie etwas tun wie:

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

3
2018-05-11 17:37