Powermock私有方法
来源:互联网 发布:还原备份软件 编辑:程序博客网 时间:2024/06/07 21:58
简单笔记下,如有以下待测方法callSumXX,其调用了private方法sumXX
可以直接mock掉callSumXX,传送门:Mockito在Maven junit测试中的应用
如果方法中还有其他待测逻辑等原因不能直接mock掉的话,这里就需要去mock被调用的private方法。
public class Calculator { private int sumXX(int a, int b) {return a + b;} public int callSumXX(int a, int b){ return sumXX(a, b); }}
1.powermock private method的方法
spy被测类:
Calculator powerMock = PowerMockito.spy(new Calculator());
构造返回:
PowerMockito.when(powerMock, "sumXX", 1, 2).thenReturn(2);
断言:
assertEquals(2, powerMock.callSumXX(1, 2));
@RunWith(PowerMockRunner.class)@PrepareForTest({Calculator.class})public class CalculatorTest {private Calculator test;@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@AfterClasspublic static void tearDownAfterClass() throws Exception {}@Beforepublic void setUp() throws Exception {test = new Calculator();}@Afterpublic void tearDown() throws Exception {}@Testpublic void testSumXX() throws Exception {Calculator powerMock = PowerMockito.spy(new Calculator());PowerMockito.when(powerMock, "sumXX", 1, 2).thenReturn(2);assertEquals(2, powerMock.callSumXX(1, 2));}}
测试发现pass了
说明private方法sumXX被成功mock(1+2=2)
2.需要注意的几个问题
a.需要加入@RunWith和@PrepareForTest,见上面的完整代码
b.PowerMockito需要配合Mockito使用,这里版本有对应关系要求:
Mockito | PowerMock------------------------------------------------------------------------------2.0.0-beta - 2.0.42-beta | 1.6.5+------------------------------------------------------------------------------1.10.19 | 1.6.41.10.8 - 1.10.x | 1.6.2+1.9.5-rc1 - 1.9.5 | 1.5.0 - 1.5.61.9.0-rc1 & 1.9.0 | 1.4.10 - 1.4.121.8.5 | 1.3.9 - 1.4.91.8.4 | 1.3.7 & 1.3.81.8.3 | 1.3.61.8.1 & 1.8.2 | 1.3.51.8 | 1.31.7 | 1.2.5否则可能出现错误如:
java.lang.NoSuchMethodError:org.mockito.internal.creation.MockSettingsImpl.setMockName(Lorg/mockito/mock/MockName;)Lorg/mockito/internal/creation/settings/CreationSettings
c.maven中powermock的引入:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <powermock.version>1.6.4</powermock.version> </properties><dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>${powermock.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>${powermock.version}</version> <scope>test</scope> </dependency>
阅读全文