简体   繁体   English

Spring-Test-Mvc控制器测试

[英]Spring-Test-Mvc Controller Tests

I'm using spring-test-mvc (standalone) because my application runs with spring 3.1. 我正在使用spring-test-mvc(独立),因为我的应用程序在spring 3.1上运行。 I'm basically just trying to test my controller methods and the response HTTP codes. 我基本上只是想测试我的控制器方法和响应HTTP代码。

@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);

    }
}

But I'm getting an NoSuchMethodError 但是我收到了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)

Is it necessary to @Autowire my Controller? @Autowire我的控制器是否有必要? Is my constructor wrong ? 我的构造函数错了吗? There is a context file in src/test/resources/"package-path"/AdminSpringControllerTests-context.xml but it only contains <context:annotation-config /> and <tx:annotation-driven /> , do I have to inject my controller bean there (question 1, is it necessary). src / test / resources /“ package-path” /AdminSpringControllerTests-context.xml中有一个上下文文件,但是它仅包含<context:annotation-config /><tx:annotation-driven /> ,我是否必须注入我的控制器bean在那里(问题1,是否有必要)。

Thx for any help :) 感谢任何帮助:)

// EDIT //编辑

I updated my code: 我更新了代码:

@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);

    }
}

But know I have the problem that (I think), I'm not getting the WebApplicationContext right: 但是知道我有一个问题(我认为),我没有正确使用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) 

you are using standaloneSetup and create your controller by using new AdminSpringController(); 您正在使用standaloneSetup并使用新的AdminSpringController()创建您的控制器; so spring doesnt have any control over it. 所以spring对此没有任何控制。 Using standaloneSetup is more convenient to test just one controller at once, without any connection to filters/interceptors etc... which is probably not what you are looking for. 使用standaloneSetup可以更方便地一次仅测试一个控制器,而无需与过滤器/拦截器等建立任何连接...这可能不是您想要的。 Try to use webAppContextSetup instead: 尝试改用webAppContextSetup:

....
 @Autowired
private WebApplicationContext wac;

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

this way it should use your spring configuration. 这样,它应该使用您的spring配置。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用spring-test-mvc进行的弹簧控制器单元测试失败 - Spring controller unit testing with spring-test-mvc is failing 是否可以使用Spring-MVC和Spring-Test-MVC测试HttpSessionListener? - Is it possible to test an HttpSessionListener with Spring-MVC and Spring-Test-MVC? 使用 spring-test-mvc 自定义 http 头测试 - Custom test of http header with spring-test-mvc Spring-Test-MVC / MockServletContext - 测试中的内容为空,但在Tomcat上工作 - Spring-Test-MVC / MockServletContext - content empty in test but working on Tomcat 在IntelliJ IDEA中使用Spring-test-mvc进行测试的更简单方法? 备择方案? - Easier way to test with Spring-test-mvc in IntelliJ IDEA? Alternatives? 使用Spring-Test-MVC对Spring-Security进行单元测试-集成FilterChain / ServletFilter - Using Spring-Test-MVC to unit test Spring-Security - Integrating the FilterChain / ServletFilter Spring MVC测试框架为异步控制器测试返回不一致的结果 - Spring MVC test framework returning inconsistent results for async controller tests 如何测试响应实体的Spring mvc控制器测试? - How to test Spring mvc controller tests for response entity? 如何测试Spring MVC控制器 - How to test a spring mvc controller 具有弹簧安全性的Spring MVC测试控制器 - Spring MVC test controller with spring security
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM