单测 - JUnit搭配PowerMock单测实践

1 篇文章 0 订阅

为什么单测要使用Mock工具

单元测试是要遵守可重复执行,故测试用例不应该依赖外部环境以及下游服务,避免不必要的问题;

Mock工具就是为了满足这一需求的,它可以帮我们mock(模仿)出外部依赖对象,这样我们的测试用例不依赖于下游服务的状态,同时可以自主控制方法的返回值,或者执行特定行为甚至返回异常。

为什么单测要使用PowerMock

首先,PowerMock就是Mock的一种实现工具库框架,类似的还有EasyMock、Mockito,但PowerMock更为强大,除了可以满足其他工具的mock功能,其还可以mock静态、final、私有方法等,是对EasyMock、Mockito的扩展。

主要注解

 @RunWith(PowerMockRunner.class)
 @prepareForTest({MyObject.class})
//@PrepareForTest注解和@RunWith注解是结合使用的,单独使用@PrepareForTest不起作用。
//这两个注解就是表示你要mock一些类的静态、private、final方法,需要mock的类就在@prepareForTest中声明,@RunWith就是申明要用PowerMock环境启动

//创建一个实例,即要测试的类,不是mock
  @InjectMocks
  private MyServiceImpl applyTaskService;
//需要mock的服务
  @Mock
  private OtherService taskManageService; 

实践

 @Test
    public void createTaskTest() throws CustomException {
        //mock调用普通方法
        Mockito.when(otherService.publishTask(Mockito.any(ArrayList.class))).thenReturn(new HashMap());  
        //mock调用静态方法,final类似
        PowerMockito.mockStatic(MyObject.class);
        PowerMockito.when(MyObject.staticMethod(userId)).thenReturn(0L);
        //验证测试结果
        Assert.assertEquals(myService.createTask(task).getMessage(), "succ");
    }
 @Test
    public void createTaskTest() throws CustomException {
        //mock调用普通方法
        Mockito.when(otherService.publishTask(Mockito.any(ArrayList.class))).thenReturn(new HashMap());  
        //mock调用privete方法
        MyObject myObject = PowerMockito.mock(MyObject.class);  
        PowerMockito.when(myObject.callPrivateMethod()).thenCallRealMethod();  
        PowerMockito.when(myObject, "privateMethodName").thenReturn(true); 
        //验证测试结果
        Assert.assertEquals(myService.createTask(task).getMessage(), "succ");
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
powermock-module-junit4-common是PowerMock框架中的一个模块,用于与JUnit4集成。这个模块可以在测试过程中模拟和修改静态方法、私有方法、构造函数和final类等。当我们需要对这些难以测试的代码进行单元测试时,可以使用这个模块来解决这个问题。 要下载powermock-module-junit4-common,需要先确保在项目的构建工具中引入了PowerMock框架的依赖。如果使用Maven进行构建,可以在pom.xml文件中添加以下依赖: <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4-common</artifactId> <version>版本号</version> <scope>test</scope> </dependency> 在Gradle中,可以在build.gradle文件的dependencies部分添加以下代码: testImplementation 'org.powermock:powermock-module-junit4-common:版本号' 在配置好依赖之后,再执行构建工具的相关命令,即可自动下载并引入powermock-module-junit4-common模块。 通过使用powermock-module-junit4-common,我们可以更方便地编写单元测试,尤其适用于需要模拟静态方法、私有方法或者处理final类的情况。它为我们提供了更多的测试可能性,使得我们能够更全面地覆盖代码并提高测试覆盖率。同时,它也提供了一系列好用的工具类和注解,让测试代码编写更加简洁高效。 总之,下载并使用powermock-module-junit4-common模块可以为我们提供更强大的测试能力,帮助我们更好地进行单元测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值