Внедрение производного тестового класса через внедрение зависимостей использует функцию базового класса - PullRequest
0 голосов
/ 16 октября 2018

У меня есть библиотека, которая выглядит следующим образом:

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 голосов
/ 16 октября 2018

Если вы не можете сделать метод базового класса виртуальным, то не используйте производный класс и вместо этого объявляйте интерфейс.Интерфейсы - это ключевая концепция, обеспечивающая эффективное внедрение зависимости в любом случае.

Код продукции:

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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...