service层调用 public class IUserServiceTest { @Autowired private IUserService userService; @Test public void testGetUser4UT8() throws Exception { IUserDao userDao = PowerMockito.mock(IUserDao.class); UserEntity expectedEntity = new UserEntity(); expectedEntity.setId(1L); expectedEntity.setName("test"); IUserService userServiceImpl = org.springframework.test.util.AopTestUtils.getTargetObject(userService); Field field = userServiceImpl.getClass().getDeclaredField("userDao"); field.setAccessible(true); field.set(userServiceImpl, userDao); PowerMockito.when(userDao.get(Mockito.any())).thenReturn(expectedEntity); UserDto userDto = userServiceImpl.getUser(1L); } } service依赖dao,可以mock一下dao,不用访问数据库,即覆盖service的逻辑。 service中调用了dao层的get方面,可以假定dao层get方法的返回值为expectedEntity(即:PowerMockito.when(userDao.get(Mockito.any())).thenReturn(expectedEntity);、 ),当调用service层的getUser方法,假定dao层返回值即起作用。 注意:dao层get方法的参数一定要使用Mockito的静态方法产生。 controller层调用,且接口调用了第三方服务的接口: public class DetectionControllerTest{ @Autowired private IRestInvokeService restInvokeService; @Test public void testGetDetection4MT0() throws Exception { RestTemplate restTemplate = PowerMockito.mock(RestTemplate.class); String data = "{\"code\":\"0\",\"data\":{\"result\":[{\"no\":\"0101\",\"name\":\"test\"}]},\"msg\":\"success\"}"; String url = "http://10.19.14.123:8080/monitor/health"; ResponseEntity<String> responseEntity = new ResponseEntity<String>(data, null, HttpStatus.OK); PowerMockito.when(restTemplate.exchange(Matchers.eq(url), Matchers.eq(HttpMethod.POST), Matchers.<HttpEntity<String>> any(), Matchers.eq(String.class))).thenReturn(responseEntity); RestInvokeServiceImpl impl = org.springframework.test.util.AopTestUtils.getTargetObject(restInvokeService); Field field = impl.getClass().getDeclaredField("restTemplate"); field.setAccessible(true); field.set(impl, restTemplate); ResultActions ra = mockMvc.perform(MockMvcRequestBuilders.post("/api/services/detection") .contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) .content(requestBody) .session((MockHttpSession)loginSession) .header(LocaleTextUtil.locale_header,"zh_CN") ); MvcResult result = ra.andReturn(); } }
@RunWith(PowerMockRunner.class) @PrepareForTest({RestHighLevelClient.class}) @PowerMockIgnore({"sun.security.*", "javax.net.*"}) UserServiceTest{ @InjectMocks UserServiceImpl userServiceMock; @Mock UserDao userDao; @Test public void testGetUsers(){ List<User> list = new ArrayList(); list.add(new User()); PowerMockito.when(userDao.getUserList(Mockito.anyString())).thenReturn(list); List<User> userList = userServiceMock.getUserList(); Assert.assertEquals(1,userList.size()); } }
相关推荐
对于SSM整合项目,我们可以使用JUnit作为测试框架,Mockito进行模拟对象测试,PowerMock进行静态方法和私有方法的测试。测试主要包括对Service层和Mapper层的测试,确保业务逻辑和数据库操作的正确性。 6. **...
因项目需要,所以我自己弄了一个SSH框架下单元...所具有的技术 基于Maven 和SSH框架,单元测试Service层采用PowerMock+Junit 来组合,可以接口进行测试 可以参考博客:http://www.cnblogs.com/Fly-Bob/p/7784184.html
此外,如果需要 mock 静态方法、私有函数或者构造函数,可以结合使用 PowerMock 这个扩展库。它允许你创建更复杂的 mock 场景,但使用时需谨慎,因为过度使用 mock 可能会掩盖潜在的问题。 总的来说,Mockito 为 ...
8. **单元测试与集成测试**:为了确保代码的质量和系统的稳定性,开发者通常会编写JUnit或Spock等单元测试,以及Mockito、PowerMock等模拟框架进行测试。此外,对于SSM这样的分布式系统,还需要进行Spring Boot的...