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>


阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 会员优惠方案 同学会策划方案 创业策划方案 开店策划方案 寿宴策划方案 开业策划方案 公司装修方案 派对策划方案 餐饮策划方案 超市策划方案 招生策划方案 策划方案模板 策划方案范文 淘宝策划方案 企业策划方案 品牌策划方案 公关策划方案 会议策划方案 网络策划方案 招商策划方案 会展策划方案 网站策划方案 宣传片策划方案 旅游方案策划 酒店策划方案 活动策划方案ppt 马拉松策划方案 夏令营策划方案 论坛推广方案 策划方案格式 活动策划方案模板 成立公司方案 美食节策划方案 品牌策划方案模板 车展策划方案 婚礼策划方案及流程 珠宝策划方案 公司灭鼠方案 商标申请方案 年会创意方案 活动布置方案