如何使用easymock-powermock模拟静态方法链调用?

时间:2017-01-05 08:18:10

标签: junit powermock easymock

我想使用easymock-powermock

在方法链下面进行模拟

OtherClass oc = SampleClass.getInstance().getSampleMethod(new StringReader("ABC");

getInstance()是一个单例方法。 getSampleMethod()是一个公共方法。

当我尝试使用expect / andReturn变为null时。

1 个答案:

答案 0 :(得分:1)

我不确定您是否立即对整个方法链设定了期望,但这不是它的工作原理。您必须分别为每个方法调用设置期望值。

在您的情况下,由于第一个方法调用是静态调用,您应该使用powermock并设置期望并为其返回模拟实例。然后你应该为第二个方法调用添加期望。我已经给出了下面的示例代码。请检查它是否适用于您的情况。

@RunWith(PowerMockRunner.class)
@PrepareForTest({SampleClass.class})
public class SimpleClassTest{
    @Test
    public void test(){
        PowerMock.mockStatic(SampleClass.class);
        SampleClass sampleClassInstance = EasyMock.createMock(SampleClass);
        EasyMock.expect(SampleClass.getInstance).andReturn(sampleClassInstance);
        EasyMock.expect(sampleClassInstance.getSampleMethod(/*required parameter goes here*/).andReturn(/*Otherclass instance goes here*/);
        PowerMock.replayAll();
        EasyMock.replay(sampleClassInstance);
    }

}