我正在使用Spring MVC Framework,我想用JUnit测试我的控制器。我应该如何模拟Controller的POST或GET参数以及如何访问Model的属性来检查其内容?我的控制器的签名如下:
@RequestMapping(value="/findings", method=RequestMethod.POST)
public String findUsers(@RequestParam("userInput") String userInput, Model m)
答案 0 :(得分:1)
您可以使用spring-test
和mockito
以及junit
来完成任务。
spring-test
使您可以在春季测试控制器和一大堆其他东西
mockito
是一个很棒的库,用于创建模拟类
这是对控制器进行单元测试的高级概述。这可能不适合您的情况,但应该给您一些起点。
public class SomeControllerTest {
private SomeController controller;
@Mock
private View view;
private MockMvc mockMvc;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders
.standaloneSetup(controller)
.setSingleView(view)
.build();
}
@Test
public void test() throws Exception {
ObjectMapper mapper = new ObjectMapper();
Model m = new Model();
MvcResult mvcResult = mockMvc.perform(post("/findings")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(m)))
.andExpect(status().isOK())
.andReturn();
}
}
答案 1 :(得分:0)
为了做到这一点,我会建议你进行一个简单的测试,你可以在其中实现你的Controller(你可以模拟所有的依赖项),之后你可以调用你的方法来模拟。
public class MyController (){
MyDependencyOne one;
MyDependencyTwo two ;
@Autowired
public MyController (MyDependencyOne one, MyDependencyTwo two){
this.one = one;
this.two = two;
}
public String findUsers(@RequestParam("userInput") String userInput, Model
m){
// do whatever
}
}
public class MyControllerTest (){
@Test
public void myTest(){
//MOCK your dependencies
MyController controller = new MyController(one, two);
Model model = new ExtendedModelMap()
controller.filter(model);
assertEquals("yourAtribute", model.asMap().get("yourAtribute");
}
}