В рамках обсуждения TDD (test driven development) периодически возникает вопрос: как тестировать приватные методы. Если не отвлекаться на вопрос о том, нужно ли тестировать их вообще, т.к. тестировать следует только публичные методы (это вопрос религиозных предпочтений), то вот несколько способов для написания unit-тестов приватных методов в .net:
- Делать метод не private, а public, оставляя комментарий о том, чтобы вернуть инкапсуляцию при создании release сборки. Это самый спорный метод, но тоже может встречаться. Как вариант, можно использовать директиву DEBUG:
#if DEBUG public FileManager(IDataAccessObject dataAccessObject) { this.dataAccessObject = dataAccessObject; } #else public FileManager() { this.dataAccessObject = new FileDataObject(); } #endif
- Делать тестируемый метод не private, а protected и создавать наследуемый класс, в котором уже будет тестироваться данный метод.
- Вместо private делать методы internal, при этом при объявлении класса добавлять атрибут:
[assembly: InternalsVisibleTo("You_lib")]
- При использовании MSTest можно задействовать класс PrivateObject, который позволяет вызывать private методы по имени.
- Использовать рефлексию.
Комментариев нет:
Отправить комментарий