Java Spring测试Mvc控制器测试
我使用SpringTestMVC(单机版),因为我的应用程序运行Spring3.1。我基本上只是尝试测试我的控制器方法和响应HTTP代码Java Spring测试Mvc控制器测试,java,spring,spring-mvc,junit,spring-test-mvc,Java,Spring,Spring Mvc,Junit,Spring Test Mvc,我使用SpringTestMVC(单机版),因为我的应用程序运行Spring3.1。我基本上只是尝试测试我的控制器方法和响应HTTP代码 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class}) public class AdminSpringControllerTests {
@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);
}
}
是否需要@Autowire我的控制器?我的构造函数错了吗?
src/test/resources/“package path”/AdminSpringControllerTests-context.xml中有一个上下文文件,但它只包含
和
,我是否必须在那里插入我的控制器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);
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@上下文配置
公共类AdminsSpringControllerTests{
私有MockMvc-MockMvc;
@自动连线
私有WebApplicationContext wac;
公共管理员SpringControllerTests(){
this.mockMvc=MockMvcBuilders.webApplicationContextSetup(this.wac.build();
}
@试验
public void testGetUsers\u Sc200\u 1()引发异常{
列表用户=新建ArrayList();
对于(int i=1;i您正在使用StandaloneStup,并通过使用新的AdminSpringController()创建控制器);因此spring无法对其进行任何控制。使用StandaloneStup一次只测试一个控制器更方便,无需连接到过滤器/拦截器等。这可能不是您想要的。请尝试改用webAppContextSetup:
....
@Autowired
private WebApplicationContext wac;
@BeforeClass
public void setUp(){
mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
这样,它应该使用您的spring配置。根本原因是spring版本问题。发布您正在使用的每个spring jar的版本。spring-test-mvc 1.0.0.M2;easyMock 3.1和spring 3.1.0;所有spring库版本都应该相同。在这种情况下,可能是3.1.0
。这是正确的;在spring 3.1.0中,spring测试mvc是正确的没有像3.2中那样实现,因此我使用了独立项目(),调试控制台输出会有帮助吗?无法解决问题…我使用的是spring 3.1,WebApplicationContext()在spring中,因为3.2WebAppConfiguration注释是从3.2开始的,WebApplicationContext现在已经13岁了:)好的。但是我使用的是3.1:)但是你不需要@WebAppConfiguration;)好的。所以我自动连接WebApplicationContext和mockMvc=MockMvcBuilders.webApplicationContextSetup(wac.build();
。但是我得到了java.lang.IllegalArgumentException: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)
....
@Autowired
private WebApplicationContext wac;
@BeforeClass
public void setUp(){
mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}