我有一个类,它会产生两个不同的静态函数调用,其中一个是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()函数。
答案 0 :(得分:1)
经过一番研究,我发现PowerMock提供了一个名为easymock的模块,其中有一个名为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
}
.
.
}
答案 1 :(得分:0)
Spies用于模拟类实例,但静态方法是类级别。您应该使用PowerMockito.mockStatic
或PowerMockito.spy
。
然而,最好的方法 - 重构代码并摆脱静态。