通过依赖关系注入注入派生的测试类使用基类函数



我有一个看起来像这样的库:

class BaseType {
public string MyFunction() {
return "Abc";
}
}
class MyClass {
public MyClass(BaseType baseType) {
Console.WriteLine(myType.MyFunction());
}
}

现在我像这样测试它:

class TestingBaseType : BaseType {
public new string MyFunction() {
return "def";
}
}
class Unittests {
public void Test() {
new MyClass(new TestingBaseType());
//Logs "Abc". But I need "def".
}
}

我的真实代码没有执行注入的模拟BaseClass。如何在不编辑生产代码的情况下进行这样的测试。我不想编辑生产代码,因为我编写单元测试的方式。

如果无法使基类的方法成为虚拟方法,则不要使用派生类并声明接口。无论如何,接口是实现有效依赖注入的关键概念。

生产代码:

public interface IType
{
string MyFunction();
}
public class MyType : IType
{
public string MyFunction() => "Abc";
}
class MyClass 
{
public MyClass(IType myType) 
{
Console.WriteLine(myType.MyFunction());
}
}

测试代码:

public class MyTestingType : IType
{
public string MyFunction() => "Def";
}
class Unittests 
{
public void Test() 
{
new MyClass(new MyTestingType());
}
}

最新更新