ヒント
ランナー構成を選択する前に、「 テスト プラットフォームの概要」を参照してください。
ニーズに応じて MSTest テストを実行する方法はいくつかあります。 IDE (Visual Studio、Visual Studio Code、JetBrains Rider など) から、またはコマンド ラインから、または CI サービス (GitHub Actionsや devOps Azureなど) からテストを実行できます。
これまで、MSTest はすべてのコンテキストでテストを実行するために VSTest に依存していましたが、バージョン 3.2.0 以降では、MSTest には独自のテスト ランナーがあります。 この新しいランナーは VSTest よりも軽量かつ高速であり、MSTest テストを実行するための推奨される方法です。
VSTest と MTP
MSTest では、VSTest と Microsoft.Testing.Platform (MTP) の両方を使用したテストの実行がサポートされています。 MTP のサポートには MSTest ランナーが搭載されており、すべてのコンテキスト (継続的インテグレーション (CI) pipelines、CLI、Visual Studio テスト エクスプローラー、VS Code Text Explorer など) でテストを実行できます。 MSTest ランナーは MSTest テスト プロジェクトに直接埋め込まれており、テストの実行に必要な他のアプリの依存関係 ( vstest.console や dotnet testなど) はありません。 ただし、 dotnet testを使用してテストを実行することはできます。
MSTest ランナーはオープンソースされ、MTP ライブラリに基づいています。
Microsoft.Testing.Platform コードは、microsoft/testfx GitHub リポジトリにあります。 MSTest ランナーには、 MSTest in 3.2.0 以降がバンドルされています。
MSTest プロジェクトで MTP を有効にする
MSTest SDK を使用すると、プロジェクトの構成、バージョン管理、MTP とその拡張機能の配置を大幅に簡略化できます。
MSTest.Sdk はプロジェクト SDK として Microsoft.NET.Sdk を置き換え、MTP は既定で有効になっています。
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Note
MSTest.Sdk は、プロジェクトがベース SDK として Microsoft.NET.Sdk を使用できる場合にのみ機能します。 projectに別の SDK が必要な場合は、<Project Sdk="...">の値をMSTest.Sdkに置き換えないでください。
たとえば、一部の ASP.NET Core統合テスト プロジェクトでは、Microsoft.NET.Sdk.Webを使用します。
MSTest.SdkはMicrosoft.NET.Sdkから派生しているため、Microsoft.NET.Sdk.Webが提供する ASP.NET Core SDK ターゲットはインポートされません。
MSTest.Sdkを使用する代わりに、MSTest を手動で構成することもできます。 プロジェクトで別のトップレベル SDK ( Microsoft.NET.Sdk.Web など) が必要な場合は手動で構成する必要がありますが、標準の Microsoft.NET.Sdkで選択することもできます。
EnableMSTestRunner プロパティを追加し、OutputTypeをプロジェクト ファイルのExeに設定します。 次に、プロジェクトに必要な MSTest 参照を追加します。 MSTest 3.2.0 以降を使用していることを確認し、利用可能な最新の MSTest バージョンに更新します。
次のproject ファイルの例を考えてみます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Enable Microsoft.Testing.Platform, this is an opt-in feature -->
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<!--
Displays error on console in addition to the log file. Note that this feature comes with a performance impact.
For more information, visit https://learn.microsoft.com/dotnet/core/testing/unit-testing-with-dotnet-test#show-failure-per-test
-->
<TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<!--
MSTest meta package is the recommended way to reference MSTest.
It's equivalent to referencing:
Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework
MSTest.Analyzers
Starting with 3.8, it also includes:
Microsoft.Testing.Extensions.TrxReport
Microsoft.Testing.Extensions.CodeCoverage
-->
<PackageReference Include="MSTest" Version="4.1.0" />
</ItemGroup>
</Project>
ヒント
ソリューション内のすべてのテスト プロジェクトで MSTest ランナーを使用するには、個々のproject ファイルではなく、EnableMSTestRunner プロパティと TestingPlatformDotnetTestSupport プロパティを Directory.Build.props ファイルに設定します。
構成とフィルター
.runsettings
MTP では、コマンド ライン オプション を使用して --settings がサポートされます。 サポートされている MSTest エントリの完全な一覧については、「 MSTest の構成: Runsettings」を参照してください。 次のコマンドは、さまざまな使用例を示しています。
dotnet runの使用
dotnet run --project Contoso.MyTests -- --settings config.runsettings
dotnet execの使用
dotnet exec Contoso.MyTests.dll --settings config.runsettings
-又は-
dotnet Contoso.MyTests.dll --settings config.runsettings
実行可能ファイルを使用:
Contoso.MyTests.exe --settings config.runsettings
テスト フィルター
コマンド ライン オプション を使用して、テスト --filterをシームレスに提供できます。 次のコマンドは、いくつかの例を示しています。
dotnet runの使用
dotnet run --project Contoso.MyTests -- --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
dotnet execの使用
dotnet exec Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
-又は-
dotnet Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
実行可能ファイルを使用:
Contoso.MyTests.exe --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
こちらも参照ください
.NET