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.
我认为webAppContextSetup方法的调用现在应该用类来显式参数化<B extends DefaultMockMvcBuilder<B>>.明显的候选人是StandaloneMockMvcBuilder或简单DefaultMockMvcBuilder(虽然后者会产生关于未经检查或不安全操作的警告).试试这个:
mockMvc = MockMvcBuilders.<StandaloneMockMvcBuilder>webAppContextSetup(wac).build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |