单元测试如何mock当前类的其他私有方法调用 |
您所在的位置:网站首页 › java如何调用其他类的方法 › 单元测试如何mock当前类的其他私有方法调用 |
在我们编写单元测试案例的过程中,如果存在mock当前类内其他私有方法的需求,该如何实现呢? (1)mock有返回值的私有方法 a.首先需要在测试类上添加RunWith注解 @RunWith(PowerMockito.class) b.其次需要在测试类添加PrepareForTest注解 @PrepareForTest(待测试的类名称) c.在测试方法中使用spy方法创建测试对象 d.对需要模拟的方法执行模拟 PowerMockito.doReturn(返回值).when(测试对象,测试对象的私有方法,私有方法参数); 此处需要注意一定不要写做下面这样,写成这样无法达到模拟效果 //PowerMockito.when(测试对象,测试对象的私有方法).doReturn(返回值); 案例如下: public class UserService{ public void searchUser(){ System.out.println("search user begin ..."); getUser(user); System.out.println("search user end ..."); } private User getUser(){ System.out.println("get user begin ..."); User user=new User(); System.out.println("get user end ..."); return user; } } @RunWith(PowerMockRunner.class) @PrepareForTest(UserService.class) public class UserServiceTest{ @Test public void testSearchUser(){ UserService userService=new UserService(); User user=new User(); UserService userService1=PowerMockito.spy(userService); try{ PowerMockito.doReturn(user).when(userService1,"getUser"); }catch(Exception e){ e.printStackTrace(); } userService1.searchUser(user); //执行结果仅输出了 search user begin ... search user end ... //说明私有方法getUser()被成功Mock } }(2)mock无返回值的私有方法 a.首先需要在测试类上添加RunWith注解 @RunWith(PowerMockito.class) b.其次需要在测试类添加PrepareForTest注解 @PrepareForTest(待测试的类名称) c.在测试方法中使用spy方法创建测试对象 d.对需要模拟的方法执行模拟 PowerMockito.doNothing().when(测试对象,测试对象的私有方法,私有方法参数); 或 PowerMockito.doAnswer(answer).when(测试对象,测试对象的私有方法,私有方法参数); 案例如下: public class UserService{ public void addUser(User user){ System.out.println("add user begin ..."); insertUser(user); System.out.println("add user end ..."); } private void insertUser(User user){ System.out.println("insert user success"); } } @RunWith(PowerMockRunner.class) @PrepareForTest(UserService.class) public class UserServiceTest{ @Test public void testAddUser(){ UserService userService=new UserService(); User user=new User(); UserService userService1=PowerMockito.spy(userService); try{ PowerMockito.doNothing().when(userService1,"insertUser",user); }catch(Exception e){ e.printStackTrace(); } userService1.addUser(user); //执行结果仅输出了 add user begin ... add user end ... //说明私有方法insertUser(user)被成功Mock } @Test public void testAddUser2(){ UserService userService=new UserService(); User user=new User(); UserService userService1=PowerMockito.spy(userService); try{ Answer answer=new Answer(){ public Object answer(InvocationOnMock invocationOnMock) throws Throwable{ return null; } } PowerMockito.doAnswer(answer).when(userService1,"insertUser",user); }catch(Exception e){ e.printStackTrace(); } userService1.addUser(user); //执行结果仅输出了 add user begin ... add user end ... //说明私有方法insertUser(user)被成功Mock } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |