`
lbyzx123
  • 浏览: 475978 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

PowerMock测试service

    博客分类:
  • java
 
阅读更多

 

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整合实现分页以及单元测试代码

    对于SSM整合项目,我们可以使用JUnit作为测试框架,Mockito进行模拟对象测试,PowerMock进行静态方法和私有方法的测试。测试主要包括对Service层和Mapper层的测试,确保业务逻辑和数据库操作的正确性。 6. **...

    SSH框架下单元测试的实现

    因项目需要,所以我自己弄了一个SSH框架下单元...所具有的技术 基于Maven 和SSH框架,单元测试Service层采用PowerMock+Junit 来组合,可以接口进行测试 可以参考博客:http://www.cnblogs.com/Fly-Bob/p/7784184.html

    Java mockito单元测试实现过程解析

    此外,如果需要 mock 静态方法、私有函数或者构造函数,可以结合使用 PowerMock 这个扩展库。它允许你创建更复杂的 mock 场景,但使用时需谨慎,因为过度使用 mock 可能会掩盖潜在的问题。 总的来说,Mockito 为 ...

    ssm权限管理系统源码附加数据库

    8. **单元测试与集成测试**:为了确保代码的质量和系统的稳定性,开发者通常会编写JUnit或Spock等单元测试,以及Mockito、PowerMock等模拟框架进行测试。此外,对于SSM这样的分布式系统,还需要进行Spring Boot的...

Global site tag (gtag.js) - Google Analytics