0


PowerMock使用-Spy公共方法

前言

本篇文章将说明如何使用

PowerMock

对公共方法进行

Spy

。关于使用

PowerMock

需要引入哪些依赖,请参考PowerMock使用-依赖准备。

正文

先给出一个示例,再对

Spy

进行解释。被测试类如下所示。

publicclassSpyPublicMethod{publicbooleanisTrue1(){returntrue;}publicbooleanisTrue2(){returntrue;}}

测试类如下所示。

publicclassPowerMockTest{@TestpublicvoidspyPublic(){SpyPublicMethod spy =PowerMockito.spy(newSpyPublicMethod());PowerMockito.doReturn(false).when(spy).isTrue1();assertThat(spy.isTrue1(),is(false));assertThat(spy.isTrue2(),is(true));}}
Spy

公共方法时需要使用

PowerMockito.spy(方法所在类的实例)

获取

Spy

出来的对象,这里称之为spy实例,不对spy实例进行任何操作的情况下,spy实例与真实实例是完全一样的。同时由于spy实例与真实实例完全一样,因此在对spy实例进行打桩时使用

doReturn()

thenReturn()

是存在差别的:使用

doReturn(返回值)

时不会执行真实方式,直接返回返回值;使用

thenReturn(返回值)

时会先执行一遍真实方法,然后返回返回值。通常情况下

Spy

需要配合

doReturn()

使用,用于抑制真实方法的执行,防止执行真实方法时报错。

同时,打桩时使用

doReturn()

thenReturn()

的语法存在差别,上面例子中打桩时如果使用的语句为

PowerMockito.doReturn(false).when(spy.isTrue1())

,会导致编译时正常,运行时报错的现象。下表对打桩时

doReturn()

thenReturn()

的语法进行了对比。
使用场景doReturn()thenReturn()打桩

public

方法

PowerMockito.doReturn(false).when(spy).isTrue()
PowerMockito.when(spy.isTrue()).thenReturn(false)

打桩

private

方法

PowerMockito.doReturn(false).when(spy, "returnTrue")
PowerMockito.when(spy, "returnTrue").thenReturn(false)

打桩

static

方法

PowerMockito.doReturn(false).when(SpyStaticPublicMethod.class, "isTrue")
PowerMockito.when(SpyStaticPublicMethod.isTrue()).thenReturn(false)

打桩

static private

方法

PowerMockito.doReturn(false).when(SpyStaticPrivateMethod.class, "returnTrue") 
PowerMockito.when(SpyStaticPrivateMethod.class, "returnTrue").thenReturn(false)

最后,

Spy

也和

Mock

一样,可以配合

whenNew()

进行使用。


本文转载自: https://blog.csdn.net/Sakura_Sacrifice/article/details/128774009
版权归原作者 樱花祭的约定 所有, 如有侵权,请联系我们删除。

“PowerMock使用-Spy公共方法”的评论:

还没有评论