繁体   English   中英

如何测试Spring MVC控制器

[英]How to test a spring mvc controller

我有以下控制器:

@Controller
public class HomeController {
    @Resource(name="returnGraph")
    Graph returnGraph;

    @RequestMapping("/")
    public String goToHomePage(HttpSession session){
        session.setAttribute("sm", returnGraph.getVertexes());
        return "home";
    }
}

我尝试了以下j单元测试,但没有成功:

public class HomeControllerTest {

    @Mock
    Graph returnGraph;
    @Mock
    Map<String,Vertex> vertexes;
    @Mock
    HttpSession session;

    HomeController homeController;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        homeController = new HomeController();
    }

    @Test
    public void testgoToHomePage(){
        when(returnGraph.getVertexes()).thenReturn(vertexes);
        assertEquals("home", homeController.goToHomePage(session));
    }
}

它说我有空指针异常。

session.setAttribute("sm", returnGraph.getVertexes());

但是我不确定为什么? 我不确定对此我还能做些什么,如何确切地处理session.setAttribute。

您可以尝试Spring MVC测试框架,这是文档资料:

http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/reference/htmlsingle/#spring-mvc-test-framework

您可以这样测试您的控制器:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public abstract class HomeControllerTest {

    @Autowired
    protected WebApplicationContext context;

    @Resource(name="returnGraph")
    Graph returnGraph;

    protected MockMvc mockMvc;

    @Test
    public void testgoToHomePage(){
        this.mockMvc.perform(get("/")
           .andExpect(status().isOk())
           .andExpect(content().string("home"));
    }

}
@RunWith(SpringJUnit4ClassRunner.class)
public class HomeControllerTest {

@Mock
Graph returnGraph;

@Mock
Map<String,Vertex> vertexes;

@Mock
HttpSession session;

@InjectMocks
HomeController homeController;

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);


}

@Test
public void testgoToHomePage(){
    when(returnGraph.getVertexes()).thenReturn(vertexes);
    assertEquals("home", homeController.goToHomePage(session));
}

}

您必须使用以下注释: @RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration

如果使用JavaConfig: @ContextConfiguration(classes = MyWebConfig.class)

一个完整的工作示例: http : //www.logicbig.com/tutorials/spring-framework/spring-web-mvc/spring-mvc-unit-testing/

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM