我使用spring-test-mvc(standalone),因爲我的應用程序使用spring 3.1運行。我基本上只是試圖測試我的控制器方法和響應HTTP代碼。Spring-Test-Mvc控制器測試
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class})
public class AdminSpringControllerTests {
private AdminSpringController cut;
private MockMvc mockMvc;
public AdminSpringControllerTests() {
cut = new AdminSpringController();
this.mockMvc = MockMvcBuilders.standaloneSetup(cut).build();
}
@Test
public void testGetUsers_Sc200_1() throws Exception{
List<User> users = new ArrayList<User>();
for (int i = 1; i<3; i++) {
User user = new User();
user.setId(i);
user.setUserId("test"+i);
user.setName("Max Testermann");
users.add(user);
}
EasyMock.expect(cut.userService.getUsers()).andReturn(users);
EasyMock.replay();
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/user");
this.mockMvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk());
EasyMock.verify(cut);
}
}
但我發現了一個的NoSuchMethodError
java.lang.NoSuchMethodError: org.springframework.web.servlet.FlashMapManager.saveOutputFlashMap(Lorg/springframework/web/servlet/FlashMap;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
at org.springframework.test.web.server.request.MockHttpServletRequestBuilder.buildRequest(MockHttpServletRequestBuilder.java:605)
at org.springframework.test.web.server.MockMvc.perform(MockMvc.java:125)
at com.prime_sign.admin.web.controller.AdminSpringControllerTests.testGetUsers_Sc200_1(AdminSpringControllerTests.java:98)
是否有必要@Autowire我的控制器?我的構造函數是錯的嗎? 在src/test/resources /「package-path」/AdminSpringControllerTests-context.xml中有一個上下文文件,但它只包含<context:annotation-config />
和<tx:annotation-driven />
,我必須在那裏注入我的控制器bean(問題1,是否有必要)。
THX任何幫助:)
//編輯
我更新了我的代碼:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class AdminSpringControllerTests {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
public AdminSpringControllerTests() {
this.mockMvc = MockMvcBuilders.webApplicationContextSetup(this.wac).build();
}
@Test
public void testGetUsers_Sc200_1() throws Exception{
List<User> users = new ArrayList<User>();
for (int i = 1; i<3; i++) {
User user = new User();
user.setId(i);
user.setUserId("test"+i);
user.setName("Max Testermann");
users.add(user);
}
EasyMock.expect(cut.userService.getUsers()).andReturn(users);
EasyMock.replay();
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/user").accept(MediaType.APPLICATION_JSON);
this.mockMvc.perform(request).andDo(print()).andExpect(MockMvcResultMatchers.status().isOk());
EasyMock.verify(cut);
}
}
但是知道我有(我認爲)這個問題,我沒有得到WebApplicationContext的權利:
java.lang.IllegalArgumentException: WebApplicationContext is required
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.test.web.server.setup.InitializedContextMockMvcBuilder.<init>(InitializedContextMockMvcBuilder.java:39)
根本原因是春天的版本問題。發佈您使用的每個彈簧罐的版本。 –
spring-test-mvc 1.0.0.M2; easyMock 3.1和Spring 3.1.0; – vicR
你所有的Spring庫版本都應該是一樣的。在這種情況下,可能是'3.1.0'。 –