繁体   English   中英

Spring4 MVC单元测试无法编译

[英]Spring4 MVC Unit test does not compile

在Spring 3.2.5→4.0.0版本更新后尝试编译源时,我有奇怪的行为。

来自ApplicationControllerTest.java错误代码片段(相当于文档中的代码):

import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
...
@Autowired
private WebApplicationContext wac;

private MockMvc               mockMvc;

@Before
public void setUp() {
    mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}

错误:

COMPILATION ERROR : /C:/Development/.../war/src/test/java/org/.../web/controller/ApplicationControllerTest.java:[59,61] C:\\Development\\...\\war\\src\\test\\java\\org\\...\\web\\controller\\ApplicationControllerTest.java:59: incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) B found : <B>org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder<B> required: java.lang.Object

如果有人查看MockMvcBuilders来源,可以看出差异:

Spring 4.0.0:

public static <B extends DefaultMockMvcBuilder<B>> DefaultMockMvcBuilder<B> webAppContextSetup(WebApplicationContext context) {
    return new DefaultMockMvcBuilder<B>(context);
}

Spring 3.2.5:

public static DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>> webAppContextSetup(WebApplicationContext context) {
    return new DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>>(context);
}

我使其成为可编辑的尝试没有成功。

实际上Spring文档说该框架应该与Java 1.6.0_10兼容。 我使用Java 1.6.0_45。

我认为现在应该使用<B extends DefaultMockMvcBuilder<B>>的类显式地调用webAppContextSetup方法。 显而易见的候选者是StandaloneMockMvcBuilder或者只是DefaultMockMvcBuilder (虽然后者会生成关于未经检查或不安全操作的警告)。 试试这个:

mockMvc = MockMvcBuilders.<StandaloneMockMvcBuilder>webAppContextSetup(wac).build();

我不得不将webAppContextSetup绑定到DefaultMockMvcBuilder,以便在我的构建(Java 1.6.0_65)中对此问题进行排序,并抑制由此产生的警告。

@SuppressWarnings({"unchecked", "rawtypes"})
@Before
public void setUp()
{
   mockMvc = MockMvcBuilders.<DefaultMockMvcBuilder> webAppContextSetup(webApplicationContext).addFilter(springSecurityFilterChain).build();
}

如另一个答案中所述,如果您正在测试独立控制器而不是集成测试完整的应用程序上下文,则StandaloneMockMvcBuilder将在没有警告的情况下工作。

(如果可以,我会简单评论一下。)

这已针对Spring Framework 4.0.1修复。

有关详细信息,请参阅以下JIRA问题: https//jira.springsource.org/browse/SPR-11238

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM