我有课我的服务这取决于ABC服务(Nuget包/sdk)
public class MyService
{
private readonly ABCService _abc;
public MyService(ABCService abc)
{
this._abc = abc;
}
public async Task Run(string id)
{
// some logic
var result = await this._abc.DoSomething(id);
// some logic
}
}
ABCService 看起来像这样:
public class ABCService
{
internal ABCService(string someConnectionString, object someSettings)
{
// ... initialization
}
public static CreateFromConnectionString(string someConnectionString, object someSettings)
{
// some logic
return new ABCService(someConnectionString, someSettings);
}
}
这种方式模拟类将不起作用并引发异常。 “父级没有默认构造函数。”
var mock = new Mock<ABCService>();
var myService = new MyService(mock.Object);
我应该如何处理这个问题?有没有办法模拟这样的课程?
我唯一想到的是创建接口 IABCService ,然后将其注入到 MyService 的构造函数中
public class IABCService
{
Task DoSomething(string id);
}
public class MyService
{
private readonly IABCService _abc;
public MyService(IABCService abc)
{
this._abc = abc;
}
}
然后我可以这样做:
var mock = new Mock<IABCService>();
var myService = new MyService(mock.Object);