TestNG的静态方法mock的步骤

最近团队内部对程序中使用大量的静态方法,而公司要求要有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() {
    }

验证结果:
eSHuPH.png
再次感谢您已看完全文,欢迎关注微信公众号零售云技术 ,您的关注我会持续更新文章!

TestNG是一个基于Java的测试框架,它支持各种类型的测试,包括单元测试、集成测试和端到端测试。Mocking是一种测试技术,用于模拟(mock)依赖项的行为,以便更方便地进行单元测试。 在使用TestNGMocking时,你可以使用Mockito这样的Mocking框架来创建和管理模拟对象。Mockito是一个流行的Java Mocking框架,它可以帮助你创建和配置模拟对象,并对其进行验证。 以下是使用TestNGMockito进行测试的一些步骤: 1. 导入TestNGMockito的相关依赖库。 2. 创建测试类,并使用@Test注解标记测试方法。 3. 在测试方法中,使用Mockito的Mock注解或Mockito.mock方法创建模拟对象。 4. 使用Mockito的when方法设置模拟对象的行为,例如当某个方法被调用时返回一个特定的值。 5. 执行测试方法,并使用Assert断言来验证预期的行为和结果。 下面是一个简单的示例代码,演示了如何在TestNG使用Mockito进行模拟对象的测试: ```java import org.mockito.Mock; import org.mockito.Mockito; import org.testng.Assert; import org.testng.annotations.Test; public class ExampleTest { @Mock private SomeDependency dependency; @Test public void testSomething() { // 设置模拟对象的行为 Mockito.when(dependency.someMethod()).thenReturn("mocked value"); // 执行被测试的方法 Example example = new Example(dependency); String result = example.doSomething(); // 验证预期的行为和结果 Assert.assertEquals(result, "expected value"); Mockito.verify(dependency).someMethod(); } } ``` 在上面的示例中,我们通过使用Mockito的Mock注解创建了一个模拟对象dependency,并使用when方法设置了它的行为。然后,我们创建了一个Example对象,并调用了它的doSomething方法。最后,我们使用Assert断言验证了预期的结果,并使用Mockito的verify方法验证了模拟对象的某个方法是否被调用。 这只是一个简单的示例,你可以根据具体的需求和情况在TestNGMockito中进行更复杂的测试和模拟。希望对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值