Java 如何用Mockito重写抽象基类行为
我有这样的代码:Java 如何用Mockito重写抽象基类行为,java,mockito,Java,Mockito,我有这样的代码: class Outer { private External external; class MyCallback extends ExternalAbstractCallback { void somethingHappened() { if (super.someCondition()) { ... }; } } public Outer() { external = ...; } public setExternal(Exte
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();
}
}
我想测试调用
doIt()
时MyCallback
的行为。我使用Mockito创建一个mock External,然后可以获取External.doSomething()
来执行MyCallback.something。我可以控制第4行调用super.somecondition
的返回值吗?我可以重新安排实现以提高可测试性吗?无法更改External
和ExternalAbstractCallback
的实现 您的问题是不能用Mockito模拟new
。简而言之,您要测试的代码永远不应该调用new
解决办法:
- 为回调添加一个getter/setter
- 将
移动到一个新的受保护的助手方法中,您可以在测试中覆盖该方法newmycallback()