gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:30:01 25 4
gpt4 key购买 nike

我有ContextListener,它注入(inject)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. 如果回答"is",如何实现。

谢谢。

最佳答案

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

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

关于java - 如何模拟在测试方法中创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44676287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com