我有以下课程
class MyClass{
public void m(InputStream is){
...
Parser eParser = getExcelFileParser();
eParser.parse(is);
...
eParser.foo();
eParser.bar();
}
public ExcelFileParser getExcelFileParser(){
...
}
}
如何在这种情况下为方法m
编写单元测试?我想只模仿eParser
对象。
有可能吗?
我使用Mockito和PowerMockito
答案 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;
}
}
我没有对此进行测试,因此可能存在问题,但基本思路应该是正确的。