如何在java类中模拟特定的静态方法?

时间:2016-05-05 08:48:50

标签: java junit mockito powermockito

在我的测试类中有许多静态方法,但我想只模拟测试类的特定方法。

我有什么方法可以模拟只有特定的方法,其余的静态方法行为正常吗?

以及如何为特定值存根方法

假设这是我的方法 PowerMockito.stub(PowerMockito.method(ServiceUtils.class," getBundle",String.class))。toReturn(bundle);

我希望getBundle方法对于传递的不同争论行为不同 例如:字符串可以是abc或def,因此对于每个字符串,getbundle方法的行为应该不同。

我只是希望有任何方法,而不是PowerMockito.method中的String.class,我可以传递像" abc"。

2 个答案:

答案 0 :(得分:2)

您可以创建真实对象的间谍。当你使用spy时,会调用真正的方法(除非方法被存根)。

这是官方文档中的一个示例。

List list = new LinkedList();
List spy = spy(list);

//optionally, you can stub out some methods:
when(spy.size()).thenReturn(100);

//using the spy calls *real* methods
spy.add("one");
spy.add("two");

//prints "one" - the first element of a list
System.out.println(spy.get(0));

//size() method was stubbed - 100 is printed
System.out.println(spy.size());

//optionally, you can verify
verify(spy).add("one");
verify(spy).add("two");

答案 1 :(得分:0)

你可以做这样的事情(如果你使用mokito)

 when(mockedList.get(0)).thenReturn("first");