[英]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测试框架,这是文档资料:
您可以这样测试您的控制器:
@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.