首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-Test-Mvc控制器测试

Spring-Test-Mvc控制器测试
EN

Stack Overflow用户
提问于 2014-02-24 12:22:48
回答 1查看 2.1K关注 0票数 2

我使用的是spring (独立的),因为我的应用程序运行在Spring3.1中。我基本上只是试着测试我的控制器方法和响应HTTP代码。

代码语言:javascript
复制
@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

代码语言:javascript
复制
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)

是否有必要@自动更新我的控制器?我的构造函数错了吗?src/test/resources/"package-path"/AdminSpringControllerTests-context.xml中有一个上下文文件,但它只包含<context:annotation-config /><tx:annotation-driven />,我是否必须将控制器bean注入其中(问题1,是否有必要)。

( Thx寻求任何帮助:)

//编辑

我更新了代码:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
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) 
EN

回答 1

Stack Overflow用户

发布于 2014-02-24 12:53:14

您正在使用standaloneSetup并使用新的AdminSpringController()创建控制器;因此spring没有对它的任何控制。使用standaloneSetup更方便的是一次只测试一个控制器,没有任何连接到过滤器/拦截器等。这可能不是你要找的。尝试使用webAppContextSetup代替:

代码语言:javascript
复制
....
 @Autowired
private WebApplicationContext wac;

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

这样,它应该使用您的弹簧配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21987675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档