前置步骤
引入依赖
<dependencies> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>2.0.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.0</version> <scope>test</scope> </dependency></dependencies>
减少覆盖率扫描插件
我的项目须要被扫描到,须要在我的项目外层 pom 文件增加如下配置:
<profiles> <profile> <id>coverage</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.4</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile></profiles>
常见示例
Mock 类本人的私有办法
@Testpublic void testMockPublicMethod(){ UserServiceImpl userService1=PowerMockito.spy(userServiceImpl); PowerMockito.doReturn("mockPublicMethod").when(userService1).publicMethod(any()); String result=userService1.mockPublicMethod(new UserBO()); Assert.assertEquals("mockPublicMethod",result);}
Mock 类本人的 Final 私有办法
@Test public void testMockPublicFinalMethod(){ UserServiceImpl userService1=PowerMockito.spy(userServiceImpl); PowerMockito.doReturn("mockFinalPublicMethod").when(userService1).finalPublicMethod(any()); String result=userService1.mockFinalPublicMethod(new UserBO()); Assert.assertEquals("mockFinalPublicMethod",result);}
Mock 类本人的公有办法
@Testpublic void testMockPrivateMethod()throws Exception{ UserServiceImpl userService1=PowerMockito.spy(userServiceImpl); PowerMockito.doReturn("mockPrivateMethod").when(userService1,"privateMethod",any()); String result=userService1.mockPrivateMethod(new UserBO()); Assert.assertEquals("mockPrivateMethod",result);}
Mock 类本人的公有静态方法
@Testpublic void testMockPrivateStaticMethod()throws Exception{ PowerMockito.mockStatic(UserServiceImpl.class); PowerMockito.doReturn("mockPrivateStaticMethod").when(UserServiceImpl.class,"privateStaticMethod",any()); String result=userServiceImpl.mockPrivateStaticMethod(new UserBO()); Assert.assertEquals("mockPrivateStaticMethod",result);}
Mock 类本人的私有静态方法
@Testpublic void testMockPublicStaticMethod(){ PowerMockito.mockStatic(UserServiceImpl.class); PowerMockito.when(UserServiceImpl.publicStaticMethod(any())).thenReturn("mockPublicStaticMethod"); String result=userServiceImpl.mockPublicStaticMethod(new UserBO()); Assert.assertEquals("mockPublicStaticMethod",result);}
Mock 父类的办法
@Testpublic void testMockParentMethod() { UserServiceImpl userService1 = PowerMockito.spy(userServiceImpl); PowerMockito.doReturn("mockParentMethod").when(userService1).parentMethod(any()); String result = userService1.mockParentMethod(new UserBO()); Assert.assertEquals("mockParentMethod", result);}
Mock 依赖的对象办法
@Testpublic void testMockMapper() { UserDO userDO = new UserDO(); userDO.setName("mockMapper"); PowerMockito.when(userMapper.getById(anyLong())).thenReturn(userDO); String result = userServiceImpl.getUserName(1000L); Assert.assertEquals("mockMapper", result);}
论断
以上代码都能够在 powermock-demo 中找到。