我有这样的代码:
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创建一个mock External,然后可以让external.doSomething()
执行MyCallback.somethingHappened。我可以在第4行控制调用super.someCondtion
的返回值吗?我可以重新安排实现以提高可测试性吗?External
和ExternalAbstractCallback
的实现不能更改。
你的问题是你不能用Mockito模拟new
。简而言之,您想要测试的代码永远不应该调用new
。
解决方案:
- 为回调添加getter/setter。
- 将
new MyCallback()
移动到一个新的受保护的助手方法中,并在测试中重写