F #: Как протестировать внутренние модули из другого проекта?
Я следую лучшим практикам F # из документации .Net :
- Создаю проект для Приложения (консоль, а не библиотека)
- Создаю проект для тестов (с Expecto, но неважно)
Проблема: некоторые из моих модулей приложения не отображаются через internal
ключевое слово. Таким образом, я не могу импортировать эти модули в свой проект «Тесты».
=> Как я могу выполнить модульное тестирование этих модулей? Стоит ли убрать внутренний контроль доступа?
Спасибо!
Ответы
Для тестирования internal
вы можете использовать InternalsVisibleTo
, для тестирования частных классов вы можете связать файлы в своем тестовом проекте (когда вы находитесь в диалоговом окне «Добавить файл», вы можете выбрать ссылку вместо открытия).
Однако, как уже было сказано, обычно вы должны тестировать только общедоступный интерфейс. Но иногда вы хотите также отдельно протестировать сложные внутренние компоненты. Например, в библиотеках времени выполнения .NET это часто делается (есть много сложных внутренних компонентов), и они часто используют подход связывания.
Поскольку частный действительно означает частный для класса, и вы даже не сможете получить доступ к таким членам из метода расширения, вы должны поместить такие члены в их собственный частный класс как открытые члены. Таким образом, когда вы связываете, класс и члены также доступны, но ни один из них не доступен в вашей производственной версии.
Используйте эту технику умеренно, потому что она привяжет ваши личные данные к тестовой системе, и вы не сможете свободно изменять внутреннюю реализацию.