如何模拟全局库方法在类中?

问题描述

我想在课堂上模拟一个全局方法,我碰壁了。

这是基本的代码结构:

public sealed class Wisher : IWisher {

  private readonly int _valueA;
  private readonly int _valueB;

  public Wisher(int a){
    _valueA = a;
  }

  public Wisher(int b){
    _valueB = b;
  }

  public int myMethod(int c){

     var client = SomeHTTPFactory(c); // Like to mock this client

     var h; 

     if (_valueA != null){
       h = client.runA(a); // point A
     }
     else if (_valueB != null){
      h = client.runB(b); // point B
     }
     else {
      h = 0;
     }
     
     return h;
  }

}

在我的起订量中,我想注入自己的客户端以测试流程的逻辑。

从根本上讲,我想测试控制流,如果应该调用_valueA是当前点A,而应该调用_valueB是当前点B。我已经有了SomeHTTPFactory的模拟,以确保它总是返回我期望的值。

我不确定如何在测试Wisher时注入Mock<SomeHTTPFactory>

感谢您提供有关此模式的任何帮助或文档。

解决方法

您将希望重构您的类以使用依赖项注入-在类的构造函数中,提供一个接口来替换“ SomeHTTPFactory”。这样,您就可以模拟该项目。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...