Тестирование методов

138
28 марта 2018, 02:07

Подскажите как нужно писать модульные тесты для методов, которые вызывают другие методы?

Стоит ли такие методы отрефакторить в отдельные классы и потом в подсовывать подделки методу?

public class ClientProgramm
{        
    public void StartProgram()
    {
        // ... Some logic
        if (logic == 1)
        {
            Method1();
        }
        // ... Some logic
        else if (logic == 2)
        {
            Method2();
        }          
    }
    private void Method1()
    {
            ....
    }
    private void Method2()
    {
            ....
    }
    // many others private methods
}
Answer 1

Вы описываете две проблемы.

При проектировании типов вы должны руководствоваться принципом единой обязанности, который говорит вам о том, что класс должен выполнять одну задачу. Если вам кажется, что логика ваших приватных методов направлена на решение задач, отличных от класса в котором они используются, тогда – да, скорее всего в вашем классе присутствует скрытая абстракция. Каким отношением связать эту скрытую абстракцию с текущим классом решать вам, в зависимости от контекста (агрегация/композиция, наследование и т.д.). Отталкиваясь от отношений классов, такая же будет и стратегия тестирования.

Второй вопрос можно переиначить следующим образом: нужно ли тестировать приватные методы? И ответ – да, нужно. Но это будет косвенно, через тестирование основных и граничных условий в публичных методах.

Answer 2

Тестирование должно зависеть не от того, кто кого вызывает, а от ТЗ на ваши методы.

Найдите ТЗ (или напишите его сами), и проверяйте в тестах, соответствуют ли они ТЗ.

(Для этого, возможно, понадобится провести рефакторинг и исключить жёсткие зависимости от нижележащих модулей.)

READ ALSO
какой паттерн проектирования выбрать c#

какой паттерн проектирования выбрать c#

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

132
C# WPF MVVM сменить страницу

C# WPF MVVM сменить страницу

Всем привет, пишу приложение в рамках (MVVM) в котором будет несколько кнопок по нажатию на каждую из которых, в отведенную область (допустим...

170
Шифрование потока

Шифрование потока

Делаю чат (клиент и сервер), при старте сервера пытаюсь зашифровать соединение через сертификат

146
Зависла установка monodevelop Mac OS

Зависла установка monodevelop Mac OS

Ввожу команды по инструкции с monodevelop

157