编写powermock用例步骤:
  
  类上面先写这两个注解@RunWith(PowerMockRunner.class)、@PrepareForTest(StudentService.class)
  
  先模拟一个假对象即studentdao方法中的局部变量
  
  用无参的方式new对象
  
  再模拟这个对象被调用时,是否有返回,有返回值给出默认值,没有用doNothing()
  
  验证有返回值使用assertEquals即可,无返回值使用Mockito.verify验证
  
  实际案例
  
  接着上一篇文章中的代码,修改下service中的代码,这次我不通过构造器注入Dao,在方法中new一个StudentDao,创建一个名为StudentNewService的类。
  
  具体示例代码如下:
  
  复制代码
  
  package com.rongrong.powermock.service;
  
  import com.rongrong.powermock.dao.StudentDao;
  
  /**
  
  * @author rongrong
  
  * @version 1.0
  
  * @date 2019/11/17 21:13
  
  */
  
  public class StudentNewService {
  
  /**
  
  * 获取学生个数
  
  * @return返回学生总数
  
  */
  
  public int getTotal() {
  
  StudentDao studentDao = new StudentDao();
  
  return studentDao.getTotal();
  
  }
  
  /**
  
  * 创建学生
  
  * @param student
  
  */
  
  public void createStudent(Student student) {
  
  StudentDao studentDao = new StudentDao();
  
  studentDao.createStudent(student);
  
  }
  
  }
  
  复制代码
  
  针对上面修改部分代码,进行单元测试,以下代码有采用传统方式测试和采用powermock方式进行测试,具体代码如下:
  
  复制代码
  
  package com.rongrong.powermock.service;
  
  import com.rongrong.powermock.dao.StudentDao;
  
  import org.junit.Assert;
  
  import org.junit.Test;
  
  import org.junit.runner.RunWith;
  
  import org.mockito.Mockito;
  
  import org.powermock.api.mockito.PowerMockito;
  
  import org.powermock.core.classloader.annotations.PrepareForTest;
  
  import org.powermock.modules.junit4.PowerMockRunner;
  
  import static org.junit.Assert.assertEquals;
  
  import static org.junit.Assert.fail;
  
  /**
  
  * @author rongrong
  
  * @version 1.0
  
  * @date 2019/11/20 21:42
  
  */
  
  @RunWith(PowerMockRunner.class)
  
  @PrepareForTest(StudentNewService.class)
  
  public class TestNewStudentService {
  
  /**
  
  * 传统方式测试
  
  */
  
  @Test
  
  public void testGetStudentTotal() {
  
  StudentNewService studentNewService = new StudentNewService();
  
  int total = studentNewService.getTotal();
  
  assertEquals(total, 10);
  
  }
  
  /**
  
  * @desc测试有返回值类型 采用powermock进行测试获取学生个数
  
  */
  
  @Test
  
  public void testGetStudentTotalWithPowerMock() {
  
  //先模拟一个假对象即studentdao方法中的局部变量
  
  StudentDao studentDao = PowerMockito.mock(StudentDao.class);
  
  try {
  
  //这句话我按照英文理解就是,我用无参的方式new了一个StudentDao对象
  
  PowerMockito.whenNew(StudentDao.class).withNoArguments().thenReturn(studentDao);
  
  //再模拟这个对象被调用时,我们默认假定返回10个证明调用成功
  
  PowerMockito.when(studentDao.getTotal()).thenReturn(10);
  
  //这里就是service就不用再说了
  
  StudentNewService studentNewService = new StudentNewService();
  
  int total = studentNewService.getTotal();
  
  assertEquals(total, 10);
  
  } catch (Exception e) {
  
  fail("测试失败了!!!");
  
  e.printStackTrace();
  
  }
  
  }
  
  /**
  
  * @desc测试的无返回值类型 采用powermock进行测试创建学生
  
  */
  
  @Test
  
  public void testCreateStudentWithPowerMock() {
  
  //先模拟一个假对象即studentdao方法中的局部变量
  
  StudentDao studentDao = PowerMockito.mock(StudentDao.class);
  
  try {
  
  //这句话我按照英文理解就是,我用无参的方式new了一个StudentDao对象
  
  PowerMockito.whenNew(StudentDao.class).withNoArguments().thenReturn(studentDao);
  
  Student student = new Student();
  
  //这句话注释与否都能运行通过,也就是我只能判断他是否被调用
  
  //PowerMockito.doNothing().when(studentDao).createStudent(student);
  
  //这里就是service就不用再说了
  
  StudentNewService studentNewService = new StudentNewService();
  
  studentNewService.createStudent(student);
  
  Mockito.verify(studentDao).createStudent(student);
  
  } catch (Exception e) {
  
  fail("测试失败了!!!");
  
  e.printStackTrace();
  
  package com.rongrong.powermock.service;
  
  import com.www.zheshengjpt.com rongrong.powermock.dao.StudentDao;
  
  import org.www.tainfengyue.cn junit.Assert;
  
  import org.junit.Test;
  
  import org.junit.runner.RunWith;
  
  import org.www.jinch2019.cn mockito.Mockito;
  
  import org.www.jinfengyuL1.cn powermock.api.mockito.PowerMockito;
  
  import org.www.xinxingylpt.com/ powermock.core.classloader.annotations.PrepareForTest;
  
  import org.powermock.modules.junit4.PowerMockRunner;
  
  import static org.junit.Assert.assertEquals;
  
  import static org.junit.Assert.fail;
  
  /**
  
  * @author rongrong
  
  * @version 1.0
  
  * @date 2019/11/20 21:42
  
  */
  
  @RunWith(PowerMockRunner.class)
  
  @PrepareForTest(StudentNewService.class)
  
  public class TestNewStudentService {
  
  /**
  
  * 传统方式测试
  
  */
  
  @Test
  
  public void testGetStudentTotal() {
  
  StudentNewService www.yuntianyull.cn studentNewService = new StudentNewService();
  
  int total www.jintianxuesha.com= studentNewService.getTotal();
  
  assertEquals(total, 10);
  
  本文大致列举了几种常见的安全措施机制包括:数据加密、数据加签、时间戳机制、AppId机制、限流机制、黑名单机制以及数据合法性校验;当然肯定有其他方式,欢迎补充。

11-21 08:01