我想模擬一些基於反射的方法。下面你可以看到細節,嘲笑基於調用的反射
類在測試
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();
}
}
測試
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();
}
}
或
@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();
}
但是,測試失敗,一個NullPointerException 。我明白我對嘲笑概念做錯了什麼,但我不明白它是什麼。您能否介紹一下,並告訴我該如何測試這種方法?
謝謝。
你是如何創建你的模擬對象和你的對象在測試?你能發佈你的整個測試課程,而不僅僅是測試方法嗎?謝謝。 –
@DavidWallace我現在編輯了問題以包含完整的代碼。 – Bala