1

下面是设置 Stripes 以使用 MockRoundtrip 的示例:

private void setupStripes() {
    context = new MockServletContext("testresults");

    // Add the Stripes Filter
    Map<String,String> filterParams = new HashMap<String,String>();
    filterParams.put("ActionResolver.Packages", "com.test.project.action,com.test.results.action");
    context.addFilter(StripesFilter.class, "StripesFilter", filterParams);

    // Add the Stripes Dispatcher
    context.setServlet(DispatcherServlet.class, "StripesDispatcher", null);


    mockRoundtrip = new MockRoundtrip(context, MyActionBean.class);
    assertNotNull(mockRoundtrip.getActionBean(MyActionBean.class));
}

问题是最后一行总是使断言失败。您必须先调用mockroundtrip.execute("eventName"),但到那时,您的操作 bean 已经为您创建好了。如果您的操作 bean 执行依赖于应用服务器的事情(例如:使用 EJB、进行 JNDI 查找),您将永远无法完成对execute(). 我想做的是获取我的动作 bean 实例,依赖注入它的字段,然后调用execute(). 有没有办法做到这一点?

4

1 回答 1

1

我在邮件列表上发布了这个并得到了这个答案:

显然,这家伙使用拦截器进行测试。

我想这也是你想要的。编写一个可以根据需要执行“注入”的 Stripes 拦截器,并且只为您的单元测试注册这个拦截器。您不必存根任何 IMO。

顺便说一句,这就是@SpringBean 所做的:它也基于拦截。

总之,制作一个只在运行测试代码时使用的拦截器。这个拦截器可以依赖注入你正在测试的动作 bean。

于 2013-02-12T18:51:28.357 回答