【问题标题】:How to override class behaviour in a JUnit test如何在 JUnit 测试中覆盖类行为
【发布时间】:2018-09-30 17:29:55
【问题描述】:

我正在尝试为 A 类中的一个方法创建 JUnit 测试,该方法创建 B 类的一个实例。由于我想隔离该方法的行为,我想用更简单的 A 覆盖我的测试套件中 B 的方法那些,这将适用于测试 A。

我曾尝试使用 Mockito 的 Spy 这样做,但据我了解,它只允许在方法调用时返回静态值,但是我需要用更简单的逻辑替换复杂的外部逻辑,同时考虑传递的参数。

解决这个问题的最佳方法是什么?

【问题讨论】:

标签: java unit-testing testing junit mockito


【解决方案1】:

如果我没听错,代码示例可能如下所示

public class A {
    public T doSth(){
       String result = new B().callMethod();
    }
}

为了使 A 更具可测试性,如果您能够修改源代码,以下方法可能会很有用。

public class A {
    private MyInterface b;
    public A(MyInterface b){
      this.b = b;
    }
    public T doSth(){
       String result = b.callMethod();
    }
}
  1. 引入 B 类正在实现的接口
  2. 通过 setter 方法或构造函数注入 B 的实例,确保 A 类仅依赖于接口
  3. 现在您可以使用 Mockito 之类的模拟框架来配置结果值,或者只使用测试存根(实现您喜欢的接口和逻辑的内部类)

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多