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!间谍只会替换你告诉它的方法