System.Convert接口

时间:2019-01-24 20:17:07

标签: c# unit-testing

是否存在实现Convert.ToInt64()的内置接口?

我正在尝试模拟负责将字符串转换为long的类,但是我不知道使用哪个接口。不必是Convert

我无法想象我是唯一需要将字符串转换为long的可测试类的人。

2 个答案:

答案 0 :(得分:1)

为帮助进行模拟,请勿直接调用Convert.ToInt64()。相反,创建一个简单的包装器接口并使用依赖项注入:

public interface IStringToLong {
   long StringToLong(string val);
}

public class StringToLong : IStringToLong {
   public long StringToLong(string val) => Convert.ToInt64(val); 
}

// While using dependency injection
public class SomeClass {
   private readonly IStringToLong _stringToLong;

   public SomeClass(IStringToLong stringToLong) {
      _stringToLong = stringToLong;
   }

   public void SomeMethod {
       // Instead of Convert.ToInt64("10000"), use this:
       var someLong = _stringToLong.StringToLong("10000");
   }
}

现在,在测试SomeClass时,您可以使用从IStringToLong接口创建的模拟对象。

答案 1 :(得分:0)

Convert是静态类,因此它不能具有接口。我不确定在不查看代码的情况下要做什么,但是如果您确实需要模拟Convert.ToInt64,则可以使用Func<string, long>,然后在测试中传递一个模拟函数,即{ {1}}。