【发布时间】:2019-06-06 20:23:58
【问题描述】:
所以我正在学习 SpringMVC 的单元测试用例,而且总体上对 Spring-Boot 也很陌生。
我想为我拥有的这个 mvc 控制器方法编写一个单元测试用例
@RequestMapping("/college")
@RestController
public class college {
@PersistenceContext
private EntityManager em;
@RequestMapping(value = "/request", method = RequestMethod.GET)
public List<Object> display() {
//List<StudentDB> val = temp.findAll();
Query query = em.createNativeQuery("SELECT * FROM STUDENT");
List<Object> val = (List<Object>)query.getResultList();
return val;
}
我试着写这样的东西-
@SpringBootTest
public class MockTestCollegeController {
@Mock
private EntityManager em;
@InjectMocks
private college col;
@Autowired
private MockMvc mockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(col).build();
}
@Test
public void dets() throws Exception
{ RequestBuilder req =MockMvcRequestBuilders.get("/college/request").accept(MediaType.APPLICATION_JSON);
MockHttpServletResponse result = mockMvc.perform(req).andReturn().getResponse();
//System.out.println(result.getResponse().getContentAsString());
//String expected = "{id:1,content:'Hello, World!'}";
Query query = em.createNativeQuery("SELECT * FROM STUDENT");
List<Object> val = (List<Object>)query.getResultList();
Assert.assertEquals(val, result);
}
但它给了我一个 NullPointerException -
MockHttpServletResponse result = mockMvc.perform(req).andReturn().getResponse();
有什么建议吗?
【问题讨论】:
-
不要在控制器中使用实体管理器。了解三层架构
-
好的,不过还是在学习,我暂时保持简单,我计划尽快添加服务和dal。
标签: java spring-mvc junit mockito entitymanager