Spring4 MVC单元测试无法编译

dma*_*a_k 12 java spring compiler-errors spring-test-mvc spring-4

在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();
}
Run Code Online (Sandbox Code Playgroud)

错误:

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);
}
Run Code Online (Sandbox Code Playgroud)

Spring 3.2.5:

public static DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>> webAppContextSetup(WebApplicationContext context) {
    return new DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>>(context);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Eug*_*mov 8

我认为webAppContextSetup方法的调用现在应该用类来显式参数化<B extends DefaultMockMvcBuilder<B>>.明显的候选人是StandaloneMockMvcBuilder或简单DefaultMockMvcBuilder(虽然后者会产生关于未经检查或不安全操作的警告).试试这个:

mockMvc = MockMvcBuilders.<StandaloneMockMvcBuilder>webAppContextSetup(wac).build();
Run Code Online (Sandbox Code Playgroud)