如何模拟从另一个测试类的方法获得的局部变量?

时间:2014-04-18 11:57:04

标签: 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(){
       ...
   } 
}

如何在这种情况下为方法m编写单元测试?我想只模仿eParser对象。

有可能吗?

我使用Mockito和PowerMockito

3 个答案:

答案 0 :(得分:2)

您可以使用spy在Mockito中执行您想要的操作(无需PowerMock),而无需更改代码。

在您的单元测试中,您需要执行以下操作:

ExcelFileParser parser = mock(ExcelFileParser.class);
MyClass myClass = spy(new MyClass());
doReturn(parser).when(myClass).getExcelFileParser();

答案 1 :(得分:0)

你可以将AnotherObject作为参数传递给方法m而不是在方法本身中调用getAnotherObject()吗?

答案 2 :(得分:0)

前言:我使用的是EasyMock而不是Mockito所以这可能有点过时了。

你不能在你的测试中创建一个MyClass的内部子类来覆盖getExcelFileParser并让它返回一个模拟吗?像这样:

public class MyClassMock extends MyClass {

     ExcelFileParser _mock;

     public MyClassMock(ExcelFileParser mock) {
          _mock = mock;
     }

     @Override
     public ExcelFileParser getExcelFileParser() {
         return _mock;
     }
}

我没有对此进行测试,因此可能存在问题,但基本思路应该是正确的。