繁体   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