gpt4 book ai didi

java - 如何使用 Mockito 覆盖抽象基类行为

转载 作者:行者123 更新时间:2023-12-04 05:04:57 24 4
gpt4 key购买 nike

我有这样的代码:

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。我可以控制对 super.someCondtion 的调用的返回值吗?在第 4 行?我可以重新安排实现以提高可测试性吗? External 的实现和 ExternalAbstractCallback无法更改。

最佳答案

你的问题是你不能模拟 new与 Mockito。简而言之,您要测试的代码永远不应该调用 new .

解决方法:

  • 为回调添加一个 getter/setter。
  • 搬家 new MyCallback()进入一个新的 protected 辅助方法,您可以在测试中覆盖该方法
  • 关于java - 如何使用 Mockito 覆盖抽象基类行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15643049/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com