F #: Как протестировать внутренние модули из другого проекта?

Aug 19 2020

Я следую лучшим практикам F # из документации .Net :

  • Создаю проект для Приложения (консоль, а не библиотека)
  • Создаю проект для тестов (с Expecto, но неважно)

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

=> Как я могу выполнить модульное тестирование этих модулей? Стоит ли убрать внутренний контроль доступа?

Спасибо!

Ответы

1 Abel Aug 19 2020 at 17:45

Для тестирования internalвы можете использовать InternalsVisibleTo, для тестирования частных классов вы можете связать файлы в своем тестовом проекте (когда вы находитесь в диалоговом окне «Добавить файл», вы можете выбрать ссылку вместо открытия).

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

Поскольку частный действительно означает частный для класса, и вы даже не сможете получить доступ к таким членам из метода расширения, вы должны поместить такие члены в их собственный частный класс как открытые члены. Таким образом, когда вы связываете, класс и члены также доступны, но ни один из них не доступен в вашей производственной версии.

Используйте эту технику умеренно, потому что она привяжет ваши личные данные к тестовой системе, и вы не сможете свободно изменять внутреннюю реализацию.