Как запустить модульные тесты для конкретной целевой платформы в Visual Studio 2017?
Я действительно люблю новое .csproj
формат. Это намного лучше, чем это страшно (ограничено) project.json
,
Однако есть одна вещь, которую я пытаюсь решить. Я объединил свои (несколько) тестовых проектов в один многоцелевой проект.
<TargetFrameworks>netcoreapp1.0;net40;net35</TargetFrameworks>
Но в Visual Explorer, похоже, нет никаких инструментов для выбора целевой платформы - она всегда просто запускает первую. Я нашел обходной путь - добавить <TargetFramework>
элемент с определенной структурой...
<TargetFramework>net35</TargetFramework>
Но есть ли способ выбрать целевую среду, не прибегая к ручному редактированию MSBuild (.csproj
) файл? Я ищу какой-то вариант в графическом интерфейсе, чтобы сделать это, в частности, чтобы я не должен помнить, чтобы редактировать .csproj
файл, чтобы переключить фреймворки перед отладкой теста или помнить о необходимости удалить эту строку перед выпуском.
2 ответа
Я знаю, что вопрос о VS, но я считаю полезным, что при нацеливании на несколько фреймворков dotnet tests
Команда запустит тесты для всех фреймворков в <TargetFrameworks>
узел:
> dotnet test
...
Test run for [projectPath]\bin\Debug\netcoreapp1.1\XUnitTestProject.dll(.NETCoreApp,Version=v1.1)
...
Test run for [projectPath]\bin\Debug\net461\XUnitTestProject.dll(.NETFramework,Version=v4.6.1)
...
NCrunch также может распознавать несколько целей и автоматически запускать тесты для каждой цели:
Оказывается, Microsoft наконец исправила это в Visual Studio 2019 (точно не знаю, когда).
Если вы укажете несколько целевых платформ:
<TargetFrameworks>netcoreapp2.1;net451</TargetFrameworks>
Теперь в графическом интерфейсе отображается:
и позволяет запускать тесты сразу на всех целевых платформах.
В настоящее время лучшим вариантом является изменение порядка целевых фреймворков в csproj.
<PropertyGroup>
<TargetFrameworks>netcoreapp2.1;net45;net46;net461;net462;net47</TargetFrameworks>
</PropertyGroup>
Если вы хотите отлаживать модульные тесты для среды Net45, вам нужно изменить ее на:
<PropertyGroup>
<TargetFrameworks>net45;net46;net461;net462;net47;netcoreapp2.1</TargetFrameworks>
</PropertyGroup>
Пользовательский интерфейс для выполнения этого в Visual Studio будет относительно простым для реализации, но на данный момент они этого не сделали.
Используйте TargetFrameWorkVersion в файле runsettings, используя оператор "или".