Заглушки доступа к защищенным переменным

Мне нужно проверить этот класс:

public abstract class GaBase
{
    protected GoogleAnalyticsInfo GAInfo;

    protected abstract void PopulateGAInfo();

    public string GetGoogleAnalyticsTag()
    {
        //Return any info related to GAInfo
    }

    //Some other stuffs
}

Мне нужно провести модульное тестирование GetGoogleAnalyticsTag метод, но мне нужно установить свойство GAInfo чтобы проверить это правильно. В рабочем коде мы делаем это, используя мой PopulateGaInfo метод, когда мы производные от этого класса.

Как я могу установить GAInfo используя заглушки?

Вот мой метод испытаний:

public void MyTest1()
{          
    var ga =  new StubGaBase()
        {
            PopulateGAInfo01 = () =>
                {
                    // How can I set GAInfo here?
                }
        };

    // The method I need to test
    var script = ga.GetGoogleAnalyticsTag();

    // My asserts
}

1 ответ

Существует шаблон, известный как "Подкласс-для-теста", который предлагает, если вам нужен доступ к методам или поведению (например, имитация возбуждения событий), вы бы вручную свернули заглушку / макет, демонстрирующий функциональность, необходимую для теста. Эта заглушка существует только в вашем тестовом проекте.

если вас интересует только тестирование защищенных переменных абстрактного класса, просто создайте производный класс и предоставьте метод, который выполняет работу и возвращает интересующие вас значения.

Другие вопросы по тегам