如何模拟在测试方法中创建的对象



我有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);
}
  1. 测试servletContext.setAttribute("db", joint);可能吗?
  2. 如果回答"是",如何。

谢谢。

首先,您需要了解您的servletContext对象是一个模拟对象,而不是一个真实的对象。joint对象是真实的,你不需要嘲笑。您可以使用模拟验证来测试servletContext.setAttribute("db", joint);

verify(servletContext).setAttribute(eq("db"), any(DBJoint.class));

您可以使用幂模拟来模拟构造函数。试试这个

DBJointHandler joint=new DBJointHandler("database_scripts", "authentication_database"(; 尝试 { PowerMockito.whenNew(DBJointHandler.class(.withArguments("database_scripts", "authentication_database"(.thenReturn(joint(; } catch (Exception e( { 待办事项 自动生成的捕获块 e.printStackTrace((; }

相关内容

  • 没有找到相关文章

最新更新