Подскажите как нужно писать модульные тесты для методов, которые вызывают другие методы?
Стоит ли такие методы отрефакторить в отдельные классы и потом в подсовывать подделки методу?
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
}
Вы описываете две проблемы.
При проектировании типов вы должны руководствоваться принципом единой обязанности, который говорит вам о том, что класс должен выполнять одну задачу. Если вам кажется, что логика ваших приватных методов направлена на решение задач, отличных от класса в котором они используются, тогда – да, скорее всего в вашем классе присутствует скрытая абстракция. Каким отношением связать эту скрытую абстракцию с текущим классом решать вам, в зависимости от контекста (агрегация/композиция, наследование и т.д.). Отталкиваясь от отношений классов, такая же будет и стратегия тестирования.
Второй вопрос можно переиначить следующим образом: нужно ли тестировать приватные методы? И ответ – да, нужно. Но это будет косвенно, через тестирование основных и граничных условий в публичных методах.
Тестирование должно зависеть не от того, кто кого вызывает, а от ТЗ на ваши методы.
Найдите ТЗ (или напишите его сами), и проверяйте в тестах, соответствуют ли они ТЗ.
(Для этого, возможно, понадобится провести рефакторинг и исключить жёсткие зависимости от нижележащих модулей.)
я новичок в программированиидошел до мысли, что без паттернов дальнейшее обучение приведёт к плохому стилю и привычкам
Всем привет, пишу приложение в рамках (MVVM) в котором будет несколько кнопок по нажатию на каждую из которых, в отведенную область (допустим...
Делаю чат (клиент и сервер), при старте сервера пытаюсь зашифровать соединение через сертификат