3

我正在尝试将Cucumber添加到我的 Spring Web MVC 项目中,该项目已经在使用 spring-test 和 JUnit。我已经编写的非 Cucumber 集成测试自动插入了 WebApplicationContext,然后MockMvc为每个测试创建了一个。我尝试使用的Cucumber 示例MockMvc在步骤定义类的生命周期内注入一次。

MockMVC的API 文档没有提供任何关于调用如何perform修改MockMvc实例以及是否可以MockMvc为多个测试重用实例的指导。我也无法在参考文档中找到明确的答案。

合同是MockMvc什么?我应该为每个测试创建一个新测试吗?

4

2 回答 2

3

MockMvc 可以创建一次并用于任意数量的请求。

于 2015-12-22T19:42:31.503 回答
3

看一下 的实例变量,MockMvc或许就能推断出答案。

static String MVC_RESULT_ATTRIBUTE = MockMvc.class.getName().concat(".MVC_RESULT_ATTRIBUTE");

private final TestDispatcherServlet servlet;

private final Filter[] filters;

private final ServletContext servletContext;

private RequestBuilder defaultRequestBuilder;

private List<ResultMatcher> defaultResultMatchers = new ArrayList<ResultMatcher>();

private List<ResultHandler> defaultResultHandlers = new ArrayList<ResultHandler>();

实例/类变量MVC_RESULT_ATTRIBUTETestDispatcherServlet是线程安全的,filters并且servletContext仅在初始化期间设置。 filters并且servletContext也应该是线程安全和无状态的。defaultRequestBuilderdefaultResultMatchers并且defaultResultHandlers有一个setter方法。从技术角度来看,MockMvc它不是线程安全的,不应该被重用。这些设置器是包私有的,MockMvc实例只能通过MockMvcBuilders. 因此,您不能在MockMvc之后操作实例,以便它实际上可以在多个测试中重新使用。

于 2015-12-22T10:00:01.767 回答