我想模拟在其他静态方法中调用的静态方法。
public class MyClass
{
public static void methodA(String s)
{
...
methodB(s);
...
}
public static void methodB(String s)
{
...
}
}
因此,我想模拟 methodA
,但我想跳过调用 methodB
。
我尝试了几乎所有我能找到的解决方案,但没有成功。每次调用 methodB
时。
我使用的一些解决方案:
PowerMockito.suppress(method(MyClass.class, "methodB"));
MyClass.methodA("s");
_
PowerMockito.stub(method(MyClass.class, "methodB"));
MyClass.methodA("s");
_
PowerMockito.mockStatic(MyClass.class);
doNothing().when(MyClass.class, "methodB", anyString());
MyClass.methodA("s");
还有很多... 有人知道如何解决这个问题吗?
最佳答案
在我看来你应该监视你的类而不是 mock 它。
在那种情况下,所有静态方法都将通过实际实现调用,最重要的是您可以指示不要调用 methodB
:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
class MyClassTest
{
@Test
public void test()
{
PowerMockito.spy(MyClass.class);
doNothing().when(MyClass.class, "methodB", anyString());
MyClass.methodA("s");
}
}
我在 Mocking Static Methods 上写了一篇文章如果您需要进一步阅读。
关于java - 模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44650835/