我有类似的代码
class Util{
public String transform(String str);
//lots of logic including ajax calls
return("Modified"+str);
}
public caseChange(String str){
//lots of logic including ajax calls
return str.toUpperCase()
}
class TextParser extends Util{
public String parse(str)
//lots of logic to modify str
str = caseChange(str);
//some more logic to modify str
return transform(str);
}
是否有办法模拟 caseChange 和转换方法以返回一些模拟数据并防止在我调用时调用父类(super class)
String result = new TextParser().parse("hello")
在单元测试类中断言结果。
在我的示例中,transform 和changeCase 过于简化。实际上,它们执行 ajax 调用,并且还有大量其他逻辑。我想模拟它们,以便可以仅对这一部分进行单元测试,然后对 super 方法进行单元测试
最佳答案
您可能需要创建另一个子类,例如
class TextParserForTest extends TextParser {
@Override
public String parse(String str) {
super.parse(str);
}
@Override
public String caseChange(String str) {
return "whatever";
}
}
<小时/>
编辑:使用mockito来实现:
import static org.mockito.Mockito.*;
import org.junit.Test;
@Test
public void test() {
TextParser tp = mock(TextParser.class);
// all the methods that you want to test
when(tp.parse(any())).thenCallRealMethod();
when...
// all the methods that you want to mock
when(tp.caseChange(any()).thenReturn("whatever");
when...
}
关于java - 我如何模拟我正在测试的类的继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246571/