[英]Spring MVC: How to unit test Model's attribute from a controller method that returns String?
例如,
package com.spring.app;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(final Model model) {
model.addAttribute("msg", "SUCCESS");
return "hello";
}
}
我想使用JUnit從home()
測試model
的屬性及其值。 我可以將返回類型更改為ModelAndView
以使其成為可能,但我想使用String
因為它更簡單。 但這不是必須的。
無論如何檢查model
而不改變home()
的返回類型? 或者它無法幫助?
你可以使用Spring MVC Test :
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(model().attribute("msg", equalTo("SUCCESS"))) //or your condition
這里有充分說明的例子
我嘗試使用副作用來回答這個問題。
@Test
public void testHome() throws Exception {
final Model model = new ExtendedModelMap();
assertThat(controller.home(model), is("hello"));
assertThat((String) model.asMap().get("msg"), is("SUCCESS"));
}
但我對此仍然不是很有信心。 如果這個答案有一些缺陷,請留下一些評論來改進/貶低這個答案。
你可以使用Mockito。
例:
@RunWith(MockitoJUnitRunner.class)
public HomeControllerTest {
private HomeController homeController;
@Mock
private Model model;
@Before
public void before(){
homeController = new HomeController();
}
public void testSomething(){
String returnValue = homeController.home(model);
verify(model, times(1)).addAttribute("msg", "SUCCESS");
assertEquals("hello", returnValue);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.