[英]Can you mock a chain of method calls with Mocktio/PowerMock if one of them is static?
想象一下,我正在单元测试的一段代码中有以下行:
SomeClass.method1().method2();
其中 SomeClass 是一个 class,method1() 是 SomeClass 中的一个static 方法,它返回某个实例,比如“aClass”,而 method2() 是一个可以从“aClass”的实例调用的方法。
是否可以模拟整个链,以便我可以返回我想要的结果? 目前我知道我可以做类似的事情:
BDDMockito.given(SomeClass.method1()).willReturn(mockedAClass);
when(mockedAClass.method2()).thenReturn(true);
但我宁愿做这样的事情:
when(SomeClass.method1().method2()).thenReturn(true);
这可能吗?
编辑:这个问题被标记为重复,但我的问题与“重复”问题之间存在很大差异。 在我的问题中,第一种方法是 static,第二种方法不是。 我似乎无法让 mockito 链接模拟这个 static 方法,这让我相信这不是同一个答案。
是的,您可以在非静态方法中为 static 方法调用编写模拟。
在下面的代码片段中,我使用了与问题中提到的相同的 class 名称。 method1()
是SomeClass
中定义的 static 方法。 method2()
是AClass
中的非静态方法。
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
import org.mockito.MockedStatic;
public class TestClass {
@Test
void methodTest() {
try (MockedStatic<SomeClass> someClass = mockStatic(SomeClass.class)) {
AClass aClass = mock(AClass.class);
someClass.when(SomeClass::method1).thenReturn(aClass);
when(aClass.method2()).thenReturn(true);
//...
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.