Próbuję wyśmiać niektóre metody oparte na refleksji. Poniżej można zobaczyć szczegóły,Wyśmiewające połączenia oparte na odbiorze
klasę badanego
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();
}
}
lub
@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();
}
Ale z testów zakończy się niepowodzeniem z NullPointerException . Rozumiem, że robię coś złego przeciwko kpiącym koncepcjom, ale nie rozumiem, co to jest. Czy możesz rzucić trochę światła na to, a także zasugerować mi, jak można tę metodę przetestować?
Dzięki.
W jaki sposób tworzysz swoje fałszywe obiekty i testowany obiekt? Czy możesz opublikować całą swoją klasę testową, a nie tylko metodę testową? Dzięki. –
@DavidWallace Edytowałem teraz pytanie, aby dołączyć cały kod. – Bala