Модульное тестирование связанных частных методов в C # - PullRequest
0 голосов
/ 06 июня 2011

Моя проблема в том, что в моем классе есть открытый метод, и он вызывает закрытый метод.Закрытый метод вызывает другой закрытый метод и так далее с четырьмя связанными приватными методами.Я знаю, что должен писать модульные тесты только для открытых методов.В моем случае у меня будет полное покрытие кода, потому что все частные методы вызываются из открытого метода.Но в случае, если что-то пойдет не так, мой модульный тест не будет точно знать, какой метод облажался.Я знаю, что я должен попытаться переместить некоторые из своих методов в отдельные классы, чтобы я мог их протестировать, но это означает, что я должен создать 4 разных класса, используя только один метод в каждом.чтобы протестировать каждый из этих приватных методов, или мне просто нужно использовать встроенную функцию в Visual Studio для тестирования приватных методов?

Ответы [ 3 ]

3 голосов
/ 06 июня 2011

Вы уже тестируете приватные методы, вызывая общедоступные.Вы проверяете ввод и вывод открытого метода - который опирается на закрытый, следовательно, все тестируются.Любые возникающие проблемы приведут к исключению, которое (после проверки трассировки стека) сообщит вам, какой метод (частный или другой) вызывает проблему.

Только частные члены private .Они не должны подвергаться воздействию извне, так как они касаются только внутренней работы объекта, поэтому модульные тесты должны (и могут только) проверять общедоступные, что вы и делаете.

1 голос
/ 06 июня 2011

Вы должны сосредоточиться на тестировании наблюдаемого поведения, что означает тестирование ожидаемых последствий вызова открытых методов.Если частные методы выполняют большую работу, рассмотрите возможность их перемещения в объекты, введенные в тестируемый объект, если нет, то если что-то пойдет не так, отладка не должна быть слишком сложной:)

0 голосов
/ 16 августа 2014

Stoimen,

Я согласен с вами.

Я читал на многих форумах, говоря, что методы ПРИВЕТ не должны тестироваться, потому что они находятся в других публичных тестах.Но главная причина заключается в том, чтобы изолировать и упростить создание блоков и создание изолированных уровней тестирования.Не для вас, но для других, которые не согласны с моим мнением, вот один простой пример: открытый метод BuildCar (sizeOfChassi, typeOfBody, Color) {вызов приватного MakeChassi (sizeOfChassi);В этом сценарии я не хочу быть публичным MakeChassi, MakeBody и Paint, потому что я просто строю и продаю автомобили, но я хочу тщательно проверить свою фабрику.Если я просто использую публичный метод, мне нужно будет создать множество вариантов тестирования, и, конечно, у меня есть риск их забыть.Просто тестируя мелкие детали (основная причина UNIT TESTs), я почти уверен, что они работают.Другое дело, что внутри класса я мог бы создать другой публичный метод для использования этих рядов, без необходимости переписывать варианты тестов.

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