繁体   English   中英

如果其中一个是 static,您可以使用 Mocktio/PowerMock 模拟一系列方法调用吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM