欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

TestNG的静态方法mock的步骤

程序员文章站 2023-04-04 23:30:33
最近团队内部对程序中使用大量的 ,而公司要求要有sonar扫描覆盖率的,因为在大量使用静态方法的地*不mock,则覆盖率达不到。于是网上很少的文章讲解对静态方法的mock,大多都是如何使用 或 ,一般对于 或`public 正常逻辑`是有文章讲解,那么今天我就把静态方法覆盖的方式梳理了一下。避免每 ......

最近团队内部对程序中使用大量的静态方法,而公司要求要有sonar扫描覆盖率的,因为在大量使用静态方法的地*不mock,则覆盖率达不到。于是网上很少的文章讲解对静态方法的mock,大多都是如何使用powermockjunit,一般对于privatepublic方法正常逻辑是有文章讲解,那么今天我就把静态方法覆盖的方式梳理了一下。避免每个人过来都来问口口相传,形成文档。

在test方法中需要用到timeutil.java中的静态方法。示例mock操作如下:

1.添加maven配置依赖

     <!-- 单元测试mock -->
     <dependency>
         <groupid>org.mockito</groupid>
         <artifactid>mockito-all</artifactid>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupid>org.powermock</groupid>
         <artifactid>powermock-core</artifactid>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupid>org.powermock</groupid>
         <artifactid>powermock-api-mockito</artifactid>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupid>org.powermock</groupid>
         <artifactid>powermock-module-testng</artifactid>
         <scope>test</scope>
     </dependency>
    
     <dependency>
         <groupid>org.testng</groupid>
         <artifactid>testng</artifactid>
         <scope>test</scope>
     </dependency>
     <!-- 单元测试 -->

2.在test类添加以下注解

    @suppressstaticinitializationfor("com.yuesf.utils.timeutil")
    @powermockignore("java.lang.*")
    @preparefortest(value = timeutil.class)
    public class saleorderbizimpltest {
    }   

3.test类中添加以下方法

  @objectfactory
    public iobjectfactory getobjectfactory() {
        return new org.powermock.modules.testng.powermockobjectfactory();
    }
@beforeclass(alwaysrun = true)
    public void setup()  {
        mockitoannotations.initmocks(this);
}

4.在测试方法添加以下注解

    @preparefortest(timeutil.class)

示例

    @preparefortest(timeutil.class)
    @test
    public void processorderitemlabel() {
    }

验证结果:
TestNG的静态方法mock的步骤