[英]Mock Multiple Static Methods
我有一個類似的類,它使兩個不同的靜態函數調用,其中一個是一些Util函數,而另一個是該類的局部函數,如下所示:
public class A {
.
.
public static myfunc1() {
obj1 = myfunc(param);
.
.
Obj obj = Util.getObj(param);
.
.
}
static obj1 myfunc(param) {
..
}
}
我想為此類編寫單元測試,如下所示:
public class Atest {
.
.
public void testMyfunc1() {
.
.
A a = new A();
A spyA = spy(a);
PowerMockito.doReturn(mockObj).when(spyA).myfunc(mockParam);
.
.
}
.
.
}
但這給了我UnfinishedStubbingException。
我也嘗試這樣做:
PowerMockito.when(spyA.myfunc(mockParam)).thenReturn(mockObj);
但是它不會覆蓋該功能。
其次,我需要知道如何覆蓋Util.getObj()函數。
經過一番研究,我知道PowerMock提供了一個名為easymock的模塊,其中有一個名為mockStaticPartial
方法,該方法可以mockStaticPartial
類中的特定靜態函數。 至於Utils.getObj()方法,可以完成類似的操作。 因此,我的測試類現在看起來像這樣:
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class, Utils.class})
public class Atest {
.
.
@Before
public void setup() {
.
.
mockStaticPartial(A.class, "myfunc");
mockStatic(Utils.class);
.
.
}
public void testMyfunc1() {
.
.
PowerMockito.when(A.mufync()).thenReturn(mockObj1);
PowerMockito.when(Utils.getObj(mockParam)).thenReturn(mockObj);
.
.
//More testing logic goes here
}
.
.
}
間諜用於模擬類實例,但是靜態方法是類級別的。 您應該使用PowerMockito.mockStatic
或PowerMockito.spy
。
但是,最好的方法-重構代碼並消除靜態變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.