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

How to mock specific static method in a java class?

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

有什么方法可以让我模拟只有特定的方法而其余的静态方法表现正常吗?

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

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

我希望 getBundle 方法对通过的不同参数有不同的行为 例如:字符串可以是 abc 或 def ,因此对于每个字符串,getbundle 方法的行为应该不同。

我只是想有什么方法可以像 "abc".

那样传递值而不是 PowerMockito.method 中的 String.class

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

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

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

这是官方文档中的示例。

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");