我有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);
进行测试吗?谢谢。
答案 0 :(得分:1)
你可以使用power mock来模拟构造函数。试试这个
DBJointHandler joint = new DBJointHandler(" database_scripts"," authentication_database"); 尝试{ PowerMockito.whenNew(DBJointHandler.class).withArguments(" database_scripts"," authentication_database")。thenReturn(joint); } catch(例外e){ // TODO自动生成的catch块 e.printStackTrace(); }
答案 1 :(得分:1)
首先,您需要了解您的servletContext
对象是一个模拟对象,而不是一个真实对象。 joint
对象是真实的,您不需要模拟。
您可以使用mockito verify
servletContext.setAttribute("db", joint);
verify(servletContext).setAttribute(eq("db"), any(DBJoint.class));