Как провести модульное тестирование класса с одной точкой входа? - PullRequest
5 голосов
/ 07 декабря 2010

Поэтому я ищу несколько советов о том, как проверить класс, который я написал.

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

В этом случае мой запрос кажется логичным для модульных тестов всех моих личных методов. Однако многие люди считают, что тестирование частных методов - плохая практика.

Так что мой вопрос заключается в том, должен ли я просто пойти дальше и проверить частные методы, или кто-то был в подобной ситуации и может предложить альтернативный метод? Нет абсолютно никакого способа, которым я мог бы надежно проверить все свои частные методы с помощью одного открытого метода.

Любая помощь приветствуется и извиняется, если мой вопрос не самый ясный. Приложение написано на C #, если это поможет.

Спасибо

Ответы [ 3 ]

6 голосов
/ 07 декабря 2010

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

Я бы сделал внутренние методы внутренними и проверил бы их через InternalsVisibleTo.Также запустите некоторые тесты «черного ящика» с помощью только метода Run ... Похоже, что это действительно интеграционные тесты, а не unit тесты.

Еще одна вещь, которую стоит рассмотреть, является ли этодействительно должен быть одним классом.Являются ли задачи разделимыми?Будут ли они иметь смысл как отдельные классы, а текущий класс просто координирует их?

0 голосов
/ 07 декабря 2010

Поскольку у вас уже есть письменное заявление, Pex может быть лучшим выбором. Он будет искать все комбинации ввода, пока не определит, что он достаточно покрыл все пути кода.

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

В следующий раз сначала напишите тесты. Это даст вам лучший дизайн.

0 голосов
/ 07 декабря 2010

Почему тестирование частных методов плохая практика?Я делаю, используя Accessors, сгенерированные Visual Studio Test Suite.Вы можете высмеивать объекты, от которых зависит ваш класс, чтобы выяснить, какие методы вызываются для них, но я полагаю, это не поможет вам действительно выяснить, что происходит внутри вашего класса, не так ли?

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