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

时间:2018-10-16 16:22:35

标签: c# unit-testing dependency-injection

我有一个看起来像这样的图书馆:

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。我如何像这样测试而不编辑生产代码。由于编写单元测试的方式,我不想编辑生产代码。

1 个答案:

答案 0 :(得分:1)

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

生产代码:

$existing_array['Last Name']

测试代码:

<?php
$existing_array =  ["ROWID" =>[0 => 0,1 => 1,2 => 2],
  "First Name" => [0 => "BILLY",1 => "SALLY",2 => "TYLER"],
  "Last Name" => [0 => "RAY",1 => "SUE",2 => "TERRIER"],
  "Middle Name" =>[0 => "B.",1 => "S.",2 => "T."]];

$expected_array = ['ROWID'=>$existing_array['ROWID'],'First Name'=>$existing_array['First Name'],'Middle Name'=>$existing_array['Middle Name'],'Last Name'=>$existing_array['Last Name']];
print_r($expected_array);