【发布时间】:2017-05-19 17:00:29
【问题描述】:
我想使用 easymock-powermock 模拟下面的方法链,
OtherClass oc = SampleClass.getInstance().getSampleMethod(new StringReader("ABC");
getInstance() 是一个单例方法。 getSampleMethod() 是一个公共方法。
当我尝试使用 expect/andReturn 时得到 null。
【问题讨论】:
我想使用 easymock-powermock 模拟下面的方法链,
OtherClass oc = SampleClass.getInstance().getSampleMethod(new StringReader("ABC");
getInstance() 是一个单例方法。 getSampleMethod() 是一个公共方法。
当我尝试使用 expect/andReturn 时得到 null。
【问题讨论】:
我不确定您是否立即对整个方法链设置期望,但这不是它的工作方式。您必须分别为每个方法调用设置期望值。
在您的情况下,由于第一个方法调用是静态调用,您应该使用 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);
}
}
【讨论】: