我们编写代码的时候, 总会写一些工具类, 为了方便调用喜欢使用 static 关键字来修饰对应方法.
那么现在举例说明, 还是准备两个接口, 第一个是查询学生总数, 第二个是新增学生两个接口, 具体示例代码如下:
- package com.rongrong.powermock.mockstatic;
- import com.rongrong.powermock.service.Student;
- /**
- * @author rongrong
- * @version 1.0
- * @date 2019/11/23 8:08
- */
- public class StudentStaticService {
- /**
- * 获取学生总数
- * @return
- */
- public int getStudentTotal(){
- return StudentUtils.getStudent();
- }
- /**
- * 创建一个学生
- * @param student
- */
- public void createStudent(Student student){
- StudentUtils.createStudent(student);
- }
- }
接着我们再来看看这个静态工具类 StudentUtils, 具体代码示例如下:
- package com.rongrong.powermock.mockstatic;
- import com.rongrong.powermock.service.Student;
- /**
- * @author rongrong
- * @version 1.0
- * @date 2019/11/23 7:38
- */
- public class StudentUtils {
- /**
- * 获取学生总数
- * @return
- */
- public static int getStudent(){
- throw new UnsupportedOperationException();
- }
- /**
- * 创建一个学生
- * @param student
- */
- public static void createStudent(Student student){
- throw new UnsupportedOperationException();
- }
- }
接下来我们用传统方式, 来做单元测试, 示例代码如下:
- @Test
- public void testGetStudnetTotal(){
- StudentStaticService staticService = new StudentStaticService();
- int studentTotal = staticService.getStudentTotal();
- assertEquals(studentTotal,10);
- }
- @Test
- public void testCreateStudent(){
- StudentStaticService staticService = new StudentStaticService();
- staticService.createStudent(new Student());
- assertTrue(true);
- }
接着运行下测试用例, 结果肯定报错了, 为什么报错, 这里就不再细说了, 参考之前文章, 报错, 如下图所示:
接下来我们使用 powermock 来进行测试, 具体示例代码如下:
- @Test
- public void testGetStudentWithMock(){
- // 先 mock 工具类对象
- PowerMockito.mockStatic(StudentUtils.class);
- // 模拟静态类调用
- PowerMockito.when(StudentUtils.getStudent()).thenReturn(10);
- // 构建 service
- StudentStaticService service = new StudentStaticService();
- int studentTotal = service.getStudentTotal();
- assertEquals(10,studentTotal);
- }
- @Test
- public void testCreateStudentWithMock(){
- // 先模拟静态工具类
- PowerMockito.mockStatic(StudentUtils.class);
- // 模拟调用
- PowerMockito.doNothing().when(StudentUtils.class);
- // 构建 service
- StudentStaticService service = new StudentStaticService();
- Student student = new Student();
- service.createStudent(student);
- // 这里用 powermock 来验证, 而不是 mock, 更体现了 powermock 的强大
- PowerMockito.verifyStatic();
- }
再次运行, 测试通过, 如下图所示:
运行之前先让 powermock 为我们准备了 StudentUtils 工具类, 而且采用 mockstatic 的方法, 最后我们用 powermock.verifyStatic() 验证, 而不是 mock, 更体现了 powermock 的强大.
来源: https://www.cnblogs.com/longronglang/p/11915449.html