Как правильно реализовать модульные тесты для .net Standard Library - PullRequest
2 голосов
/ 07 октября 2019

Итак, насколько я понял из моего исследования. Стандартная библиотека .net не может использоваться сама по себе, поэтому ее необходимо протестировать с помощью другой платформы, либо с использованием .net Framework, либо .net Core reference . Вот как я это интерпретировал. Сейчас я пытаюсь создать стандартную библиотеку, так как мне нужно, чтобы она была максимально совместимой с большинством устройств, проблема в том, что я не знаю, как правильно создавать модульные тесты. Каждый раз, когда я создаю проект MSTest, я получаю следующую ошибку:

В тестовом прогоне используются библиотеки DLL, созданные для платформы .NETCoreApp, Version = v1.0 и платформы X64. Следующие DLL не соответствуют настройкам фреймворка / платформы. Otchi.Ebml.Tests.dll создан для Framework 2.1 и платформы AnyCPU.

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

Ответы [ 2 ]

3 голосов
/ 07 октября 2019

Стандартная библиотека .NET не содержит компонентов, необходимых для выполнения. Он определяет только шаблоны исполнения. При развертывании на конкретной архитектуре компьютера / процессора код должен знать, какой набор команд выполнять.

Здесь вступают в игру платформа .NET и ядро ​​.NET. .NET Framework содержит подробности выполнения для наборов инструкций, поддерживаемых операционной системой Microsoft Windows. Ядро .NET, аналогично, содержит набор инструкций для дополнительных архитектур, не поддерживаемых Windows.

Для написания модульных тестов необходимо создать НОВЫЙ проект, либо в .NET, либо в .NET core, для выполненияваш код. Если вы хотите охватить все ваши базы или если у вас есть несколько двоичных файлов, которые по-разному компилируются для разных архитектур (на ум приходят сторонние библиотеки), то вы можете провести модульное тестирование для нескольких дистрибутивов.

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

0 голосов
/ 09 октября 2019

Написание модульных тестов для библиотек, нацеленных на .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.

...