我有这样的代码:
class Outer {
private External external;
class MyCallback extends ExternalAbstractCallback {
void somethingHappened() { if (super.someCondition()) { ... }; }
}
public Outer() {
external = ...;
}
public setExternal(External e) { external = e; } // test support
public void doIt() {
external.setCallback(new MyCallback());
external.doSomething();
}
}
我希望在调用MyCallback
时测试doIt()
的行为。我使用Mockito创建一个模拟外部,然后可以external.doSomething()
执行MyCallback.somethingHappened。我可以在第4行控制super.someCondtion
的呼叫的返回值吗?我可以重新安排实现以提高可测试性吗? External
和ExternalAbstractCallback
的实现无法更改。
答案 0 :(得分:3)
你的问题是你不能用Mockito模仿new
。简而言之,您要测试的代码永远不应该调用new
。
解决方法:
new MyCallback()
移动到您在测试中覆盖的新的受保护助手方法