PowerMock+Junit测试小记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PowerMock+Junit测试小记相关的知识,希望对你有一定的参考价值。

intelli J开发工具,单元测试,利用Powermock模拟从数据库获取数据,还有测试验证私有变量的值。

  1. 模拟数据,因为不可能每次测试都要连接数据库,并且准备数据也很麻烦,所以利用Powermock来模拟数据获取,来测试程序逻辑单元的正确性。实例代码如下:
    List<_Agv> listAgvs = // 此处是从固定文件获取数据,并返回list;
    PowerMockito.when(T_Agv.getAllAgv()).thenReturn(listAgvs);// 这里T_Agv.getAllAgv原本是从数据库获取数据,这里模拟
    AgvHelper agvHelper = AgvHelper.getInstance();//在getInstance函数里用到了T_Agv.getAllAgv()函数

            备注:注意下,首先在测试类加上注解@RunWith(PowerMockRunner.class),另外因为模拟用到了类的静态方法,所以在类上或者方法上加注解@PrepareForTest(T_Agv.class)
  2. 验证私有变量的值
    就是在你的私有变量没有对外提供获取接口的情况下,通过Powermock的某些方法直接获取到私有变量,并验证结果。
    Whitebox.getField(AgvHelper.class, "agvMap").get(agvHelper);//三个参数分别是类、私有变量名、该类的对象,返回的结果是个object(如果该变量是基本数据类型,也有相应方法直接返回),然后转换一下即可
    Whitebox.getInternalState(agvHelper, "agvMap");//同上

    其他的Junit的一些方法就不记了,网上太多资料了,并且还是很简单的。最主要是你自己的验证方法和方式。另外IntelliJ有code coverage功能,可以查看自己测试的是否全面,还是很方便的。

以上是关于PowerMock+Junit测试小记的主要内容,如果未能解决你的问题,请参考以下文章

基于Junit5+PowerMock的单元测试框架

PowerMock 入门

我们可以使用Mockito和PowerMock出售junit测试类

使用 Powermock 时出现 NoClassDefFoundError

解决Jacoco和PowerMock不兼容的问题

PowerMock ECLemma 覆盖问题