Написание модульных тестов для библиотек, нацеленных на .NETStandard, довольно сложно, так как вам приходится тестировать свой код на соответствие различным реализациям выбранной вами версии .NETStandard. Как уже обрисовано в общих чертах Zakk Diaz , это связано с тем, что .NETStandard просто определяет типы, которые затем реализуются на реальных платформах.
Наиболее распространенными проблемами являются различия в реализации на различных платформах, таких как.NETFramework, .NETCore, Mono и т. Д. Однако существуют также различия в реализациях в различных версиях платформ, которые могут мешать работе вашей библиотеки на указанных платформах (см. этот пример ).
Вот почему выполнение ваших тестов на самой низкой версии платформы, которая реализует выбранную вами версию .NETStandard, не совсем ее сокращает. Вы должны принять во внимание все среды выполнения, с которыми может использоваться ваша библиотека.
Как правило, у вас есть два варианта решения этой проблемы.
Опция 1
Используйте множественный таргетинг , чтобы создать свой модульный тестовый проект для всех допустимых сред выполнения. Это также означает, что у вас должен быть очень большой набор целевых структур для вашего модульного тестового проекта, который необходимо будет расширять при выпуске новых версий платформы.
Если вы хотите охватить все соответствующие сценарии, тогдау вас будет десятки целевых фреймворков и столько же версий вашего проекта модульного тестирования. Давайте просто предположим, что это может быстро выйти из-под контроля.
Вариант 2
Используйте платформу для модульного тестирования, которая на самом деле может обрабатывать .NETStandard. Построение модульных тестов для .NETStandard и выполнение этих тестов в соответствующих средах выполнения уменьшит сложность вашего тестового проекта.
На сегодняшний день большинство платформ модульного тестирования не могут этого делать, и вы застряли с этим. Вариант 1 . Тот, который соответствует этому подходу и фактически решает вашу проблему: Nuclear.Test .
Обратите внимание, что Nuclear.Test требует .NETStandard 2.0 и обрабатывает только .NETFramework и .NETCore вего текущий выпуск. Однако это может измениться, и я работаю над уменьшением требуемой версии .NETStandard до 1.0, а также включаю тестировщиков для Mono и UWP.