Java 如何模拟从测试类的另一个方法获得的局部变量?
我有以下课程Java 如何模拟从测试类的另一个方法获得的局部变量?,java,testing,mocking,mockito,powermock,Java,Testing,Mocking,Mockito,Powermock,我有以下课程 class MyClass{ public void m(InputStream is){ ... Parser eParser = getExcelFileParser(); eParser.parse(is); ... eParser.foo(); eParser.bar(); } public ExcelFileParser getExcelFileParser(){
class MyClass{
public void m(InputStream is){
...
Parser eParser = getExcelFileParser();
eParser.parse(is);
...
eParser.foo();
eParser.bar();
}
public ExcelFileParser getExcelFileParser(){
...
}
}
在这种情况下,如何为方法m
编写单元测试?我只想模拟eParser
对象
可能吗
我使用Mockito和PowerMockito你能将另一个对象作为参数传递到方法m中,而不是在方法本身中调用getAnotherObject()吗?序言:我使用EasyMock not Mockito,所以这可能有点不合适 您不能在测试中创建MyClass的内部子类来覆盖getExcelFileParser并使其返回模拟吗?像这样:
public class MyClassMock extends MyClass {
ExcelFileParser _mock;
public MyClassMock(ExcelFileParser mock) {
_mock = mock;
}
@Override
public ExcelFileParser getExcelFileParser() {
return _mock;
}
}
我没有对此进行测试,因此可能会出现问题,但基本想法应该是正确的。您可以使用
间谍在Mockito中执行您想要的操作(无需PowerMock),而无需更改代码
在单元测试中,您需要执行以下操作:
ExcelFileParser parser = mock(ExcelFileParser.class);
MyClass myClass = spy(new MyClass());
doReturn(parser).when(myClass).getExcelFileParser();
然后使用Mockito来模拟getAnotherObject,例如当(myClass.getAnotherObject())。然后返回(myNewMockObject)Yes!间谍只会替换你告诉它的方法