Последняя инфраструктура xunit не позволяет тестировать бегунов в библиотечном коде при компиляции с .Net Core framework (это разрешено для обычного кода Visual Studio). Решение состоит в том, чтобы создать отдельный тестовый проект для запуска тестовых примеров.. Основная библиотека ядра. Как проверить частные методы с помощью xUnit
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые методы, которые я хочу протестировать, являются «частными» методами. Как я могу вызвать эти методы из моего тестового проекта, не делая их область видимой?
Более общий вопрос: Как вы можете проверять частные методы, когда общедоступный метод, использующий закрытый метод, не может быть использован? (из-за своей интерактивной природы - то есть, он имеет ReadLine(), содержащийся в нем)
Возможные решения:
1) делают частные методы общественного и переименовывать их таким образом, чтобы что они не должны использоваться снаружи. (Используйте «частный» или «внутренний» как часть имени)
2) Создайте поле «public static bool Testflag», которое может быть установлено в true, чтобы обойти интерактивные части публичного метода, чтобы обеспечить тестирование всех его частей.
(Хотя я использовал оба вышеуказанных метода - мне это действительно не нравится, потому что частные методы должны оставаться закрытыми, а флаги добавляют много лишних сложностей. Кто-то столкнулся с одной и той же проблемой? Как вы это решили?
Общий ответ на этот вопрос - рассматривать интерактивную часть как услугу и скрывать ее за интерфейсом (ваш может быть назван «IInputRequester» или аналогичным). Тогда ваш unit-test может передать издеваемую реализацию этого интерфейса ('MockInputRequester'), в то время как ваш производственный код может передать реальную реализацию этого интерфейса (' ConsoleInputRequester'). Обратите внимание, что это не просто то, что вы делаете для модульного тестирования. Это стандартная часть создания [SOLID] (https://en.wikipedia.org/wiki/SOLID_ (object-oriented_design)) дизайна. –
Также выглядит так, что общедоступный метод тесно связан с проблемами реализации, которые затрудняют тестирование. Это признак того, что дизайн нуждается в рефакторинге. (запах кода) – Nkosi