我有ContextListener
注入ServletContext
對象與數據庫工作。這DBJoint
對象創建方法,該方法測試:如何模擬在測試方法內創建的對象?
@WebListener
public class ContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
final ServletContext servletContext =
servletContextEvent.getServletContext();
final DBJoint joint = new DBJointHandler(
"database_scripts", "authentication_database");
servletContext.setAttribute("db", joint);
}
}
爲了測試servletContext.setAttribute("db", joint);
我需要DBJoint joint
在setAttribute
發送。
我的測試:
@Test
public void whenThen() {
final ServletContextEvent event = mock(ServletContextEvent.class);
final ServletContext context = mock(ServletContext.class);
when(event.getServletContext()).thenReturn(context);
final ContextListener listener = new ContextListener();
listener.contextInitialized(event);
DBJoint joint = ..?// how to mocking this?
verify(context).setAttribute("db", joint);
}
- 測試爲
servletContext.setAttribute("db", joint);
可能是? - 如果回答「是」,如何。
謝謝。
你已經知道如何模擬這些類。我認爲你需要的是'org.mockito.ArgumentCaptor';'你想要「捕獲」由servletContext.setAttribute(「db」,joint);'設置的DBJoint。一旦你得到了「聯合」對象,那麼你可以驗證它。希望這有助於。 –
是的,看看'org.mockito.ArgumentCaptor' – liminal
Upvoting here - 只是爲了表達我對你的態度的讚賞!我想就另一個問題說些什麼:它寫得很好 - 但下一次:在提出問題之前通過搜索引擎運行例外消息。這可以讓你安心很多時間。 – GhostCat