簡體   English   中英

模擬多種靜態方法

[英]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.mockStaticPowerMockito.spy

但是,最好的方法-重構代碼並消除靜態變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM