我有一个看起来像这样的库:
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());
}
}