Как запустить модульные тесты для конкретной целевой платформы в Visual Studio 2017/2019?
Я действительно люблю новый формат .csproj
. Это намного лучше, чем страшный (ограниченный) project.json
.
Однако есть одна вещь, которую я пытаюсь выработать. Я объединил свои (несколько) тестовых проектов в один многоцелевой проект.
<TargetFrameworks>netcoreapp1.0;net40;net35</TargetFrameworks>
Но, похоже, в Test Explorer в Visual Studio нет инструментов для выбора целевой структуры - он всегда запускает первый. Я нашел обходное решение - добавить элемент <TargetFramework>
с определенной структурой...
<TargetFramework>net35</TargetFramework>
Но есть ли способ выбрать целевую структуру, не прибегая к ручному редактированию файла MSBuild (.csproj
)? Я ищу какой-то вариант в графическом интерфейсе для этого - в частности, поэтому мне не нужно забывать редактировать файл .csproj
, чтобы переключать фреймворки перед отладкой теста или не забудьте удалить эту строку до выпуска.
Ответы
Ответ 1
Я знаю, что вопрос касается 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 также может распознавать несколько целей и автоматически запускать тесты для каждой цели:
![enter image description here]()
Ответ 2
Использовать TargetFrameWorkVersion в файле runsettings с помощью оператора 'or'.
Ответ 3
На данный момент лучшим вариантом является изменение порядка целевых фреймворков в 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 будет относительно простым для реализации, но на данный момент они этого не сделали.