【发布时间】:2016-10-31 05:38:47
【问题描述】:
我有类似的代码
class superClass {
public String transform(String str) {
//lots of logic including ajax calls
return("Modified"+str);
}
}
class baseClass extends superClass {
private FetchData fetchData;
baseClass(FetchData fetchData) {
this.fetchData = fetchData;
}
public String parse() {
String str = fetchData.get();
//some more logic to modify str
return transform(str);
}
}
我正在使用 mockito 和 junit 来测试它。我在嘲笑baseClass 并做这样的事情
baseClass baseMock = Mockito.mock(baseClass.class);
Mockito.when(baseMock.parse()).thenCallRealMethod();
Mockito.when(baseMock.transform()).thenReturn("Something");
我如何注入模拟 fetchData,因为它是通过构造函数注入的?
【问题讨论】:
-
你不能。您应该在基类中使用反射或公开 setter。
-
你在测试什么,
baseClass?如果是这样,我想你可能误解了如何测试。如果你想测试baseClass,你不会嘲笑它。你会嘲笑它需要的任何没有被测试的东西。如果您想模拟FetchData,您可以通过传递baseClass一个不同的FetchData实现(模拟)轻松地做到这一点。另外,你的命名有点混乱。超类是基类。你的baseClass应该是DerivedClass,你的类名应该总是以大写字母开头。并且请正确格式化您的代码,它目前也无法编译。 -
提示:java 类名使用大写。总是。
标签: java unit-testing junit mockito powermock