繁体   English   中英

如何在JUnit测试中覆盖类行为

[英]How to override class behaviour in a JUnit test

我正在尝试为类A中的方法创建JUnit测试,该方法创建类B的实例。由于我想隔离该方法的行为,因此我想用更简单的方法在A的测试套件中覆盖B的方法,即将用于测试A的目的。

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

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

如果我说对了,代码示例可能如下所示

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之类的模拟框架来配置结果值,也可以只使用一个测试存根(实现您喜欢的接口和逻辑的内部类)

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM