Mocking Reflexion basierte Anrufe

Ich versuche zu verspotten einige Reflexion basierenden Methoden. Unten können Sie sehen, die details,

Klasse Unter Test

public class TracerLog {
    @AroundInvoke
    public Object logCall(InvocationContext context) throws Exception {
        Logger logger = new Logger();
        String message = "INFO: Invoking method - " 
                + context.getMethod().getName() + "() of Class - " 
                + context.getMethod().getDeclaringClass();

        logger.write(message);
        return context.proceed();
    }
}

Test

public class TracerLogTest {

@Mock
InvocationContext mockContext;
@Mock
Logger mockLogger;
@InjectMocks
private TracerLog cut = new TracerLog();

@BeforeMethod
public void setup() {
    MockitoAnnotations.initMocks(this);
}

@Test
public void logCallTest() throws Exception {
    when(mockContext.proceed()).thenReturn(true);
    when(mockContext.getMethod().getDeclaringClass().getName()).thenReturn("someClass");
    cut.logCall(mockContext);
    verify(mockContext).proceed();
}

}

oder

@Test
public void logCallTest() throws Exception {
    when(mockContext.proceed()).thenReturn(true);
    when(mockContext.getMethod().getName()).thenReturn("someMethod");
    when(mockContext.getMethod().getDeclaringClass().getName()).thenReturn("someClass");
    cut.logCall(mockContext);
    verify(mockLogger).write(anyString());
    verify(mockContext).proceed();
}

Aber, die tests fehlschlagen mit einer NullPointerException. Ich verstehe, dass ich bin, etwas falsch zu machen gegen Spott Konzepte, aber ich verstehe nicht, was es ist. Könntest du bitte werfen etwas Licht auf ihn und auch mir empfehlen, wie diese Methode getestet werden kann?

Dank.

  • Wie erstellen Sie Ihre mock-Objekte und Ihr Objekt unter test? Können Sie Ihre gesamte test-Klasse, nicht nur die test-Methode? Danke.
  • Ich habe nun bearbeitet Sie die Frage, enthalten den vollständigen code.
InformationsquelleAutor Bala | 2012-01-25
Schreibe einen Kommentar