Microsoft テスト フレームワークである MSTest は、.NET アプリケーション向けテスト フレームワークです。 これにより、テストの記述および実行が可能になり、Visual Studio と Visual Studio Code テスト エクスプローラー、.NET CLI、および多くの CI パイプラインに統合されたテスト スイートを提供できます。
MSTest は、完全にサポートされているオープンソースのクロスプラットフォーム テスト フレームワークで、GitHub でホストされ、サポートされているすべての .NET ターゲット (.NET Framework、.NET Core、.NET、UWP、WinUI など) で動作します。
実行設定
.runsettings ファイルを使って、単体テストの実行方法を構成できます。 runsettings とプラットフォームに関連する構成の詳細については、VSTest の runsettings のドキュメント、または MSTest ランナーの runsettings のドキュメントを確認してください。
MSTest 要素
次の runsettings エントリを使用すると、MSTest の動作を構成できます。
| 構成 | 既定値 | 価値観 |
|---|---|---|
| アセンブリークリーンアップタイムアウト | 0 | アセンブリ クリーンアップ メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 アセンブリ クリーンアップ メソッドで指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 |
| AssemblyInitializeTimeout | 0 | アセンブリ初期化メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 アセンブリ初期化メソッドで指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 |
| AssemblyResolution | 偽り | 単体テストを検索して実行する場合、追加のアセンブリへのパスを指定できます。 たとえば、テスト アセンブリと同じディレクトリにない依存関係アセンブリにこれらのパスを使用します。 パスを指定するには、Directory Path 要素を使用します。 パスには環境変数を含めることができます。<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>この機能は、.NET Framework ターゲットを使用している場合にのみ適用されます。 |
| CaptureTraceOutput | ほんとう | 現在実行中のテストに関連付けられる Console.Write*、Trace.Write*、Debug.Write* API から送信されるテキスト メッセージをキャプチャします。 |
| ClassCleanupLifecycle | クラスの終了 | アセンブリの最後でクラスのクリーンアップを実行したい場合は、それを EndOfAssembly に設定します。 (EndOfClass が既定であり、ClassCleanup 動作のみであるため、MSTest v4 以降ではサポートされなくなりました) |
| ClassCleanupTimeout (クラスクリーニングタイムアウト) | 0 | クラス クリーンアップ メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 クラス クリーンアップ メソッドで指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 |
| ClassInitializeTimeout | 0 | クラス初期化メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 クラス初期化メソッドで指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 |
| ConsiderFixturesAsSpecialTests | 偽り | Visual Studio、Visual Studio Code AssemblyInitialize および AssemblyCleanup ログで、ClassInitialize、ClassCleanup、Test Explorer、 を個別のエンティティとして表示するには、この値を True に設定します。 |
| テスト実行完了後に配置ディレクトリを削除 | ほんとう | テストの実行後に配置ディレクトリを保持するには、この値を false に設定します。 |
| デプロイメント有効 | ほんとう | 値を false に設定すると、テスト メソッドで指定した配置項目が配置ディレクトリにコピーされません。 |
| DeployTestSourceDependencies | ほんとう | テスト ソース参照を展開するかどうかを示す値。 |
| 他のアセンブリから基底クラスのテストメソッドを有効化 | ほんとう | 継承するテスト クラスとは異なるアセンブリ内の基底クラスからのテスト メソッドの検出を有効にするかどうかを示す値。 |
| 強制レガシーモード | 偽り | Visual Studio の以前のバージョンで、MSTest アダプターは、処理速度とスケーラビリティを向上するために最適化されました。 テストが実行される順序などの一部の動作は、Visual Studio の以前のエディションでの動作と完全に同じではない場合もあります。 以前のテスト アダプターを使うには、値を true に設定します。 たとえば、単体テスト用に指定された app.config ファイルがある場合は、この設定を使用することがあります。 より新しいアダプターを使用できるように、テストのリファクタリングを検討することをお勧めします。 |
| MapInconclusiveToFailed (不確定を失敗にマッピング) | 偽り | テストが結果不確定の状態で完了した場合は、テスト エクスプローラーでスキップ状態にマップされます。 結果不確定のテストを失敗として表示する場合は、この値を true に設定します。 |
| MapNotRunnableToFailed | ほんとう | 実行不可能な結果を失敗したテストにマップするかどうかを示す値。 |
| OrderTestsByNameInClass | 偽り | テスト エクスプローラーとコマンド ラインの両方でテスト名でテストを実行する場合は、この値を true 設定します。 |
| 並列化する | 並列処理を設定するために使われます。 Workers: 並列処理に使うスレッド/ワーカーの数。既定では、現在のコンピューターに搭載されたプロセッサの数です。 SCOPE: 並列処理のスコープ。 MethodLevel に設定できます。 既定では、ClassLevel です。 <Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
| 設定ファイル | ここで、MSTest アダプターで使用するテスト設定ファイルを指定できます。 また、[設定] メニューからテスト設定ファイルを指定することもできます。 この値を指定する場合は、ForcedlegacyMode も true に設定する必要があります。 <ForcedLegacyMode>true</ForcedLegacyMode> |
|
| TestCleanupTimeout | 0 | テスト クリーンアップ メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 テスト クリーンアップ メソッドで指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 |
| TestInitializeTimeout | 0 | テスト初期化メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 テスト初期化メソッドで指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 |
| TestTimeout | 0 | 指定されたグローバル テスト ケースのタイムアウトを取得します。 |
| クラスとアセンブリのクリーンアップ警告をエラーとして扱う | 偽り | クラスのクリーンアップの失敗をエラーとして表示するには、この値を true に設定します。 |
| 発見された警告をエラーとして扱う | 偽り | テスト検出の警告をエラーとして報告するには、この値を true に設定します。 |
TestRunParameter 要素
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
テスト実行パラメーターは、実行時にテストで使用できる変数と値を定義する方法を提供します。 パラメーターには MSTest TestContext.Properties プロパティを使ってアクセスします。
private string _appUrl;
public TestContext TestContext { get; set; }
[TestMethod]
public void HomePageTest()
{
string _appUrl = TestContext.Properties["webAppUrl"];
}
テスト実行パラメーターを使用するには、パブリックの TestContext プロパティをテスト クラスに追加します。
.runsettings ファイルの例
次の XML は、一般的な .runsettings ファイルの内容を示しています。 このコードをコピーし、自分のニーズに合わせて編集します。
ファイルの各要素には既定値があるため、省略可能です。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at runtime -->
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
<!-- MSTest -->
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>false</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
<ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
<AssemblyResolution>
<Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
</AssemblyResolution>
</MSTest>
</RunSettings>
testconfig.json
MSTest を使用してテストを実行する場合は、testconfig.json ファイルを使用してテスト ランナーの動作を構成できます。
testconfig.json ファイルは、テスト ランナーの構成設定を含む JSON ファイルです。 このファイルは、テスト ランナーとテスト実行環境を構成するために使用されます。 詳細については、Microsoft.Testing.Platform testconfig.json ドキュメントを参照してください。
MSTest 3.7 以降では、同じ構成ファイルで MSTest の実行を構成することもできます。 次のセクションでは、testconfig.json ファイルで使用できる設定について説明します。
MSTest 要素
MSTest 設定は、以降のセクションで説明する機能ごとにグループ化されます。
| エントリ | 既定値 | 説明 |
|---|---|---|
| クラス内でテストを名前順に並べる | 偽り | テスト エクスプローラーとコマンド ラインの両方でテスト名でテストを実行する場合は、この値を true 設定します。 |
| 他のアセンブリから基本クラスのテストメソッドを有効にする | ほんとう | 継承するテスト クラスとは異なるアセンブリ内の基底クラスからのテスト メソッドの検出を有効にするかどうかを示す値。 |
| classCleanupLifecycle | 組み立て完了 | クラスの終了時にクラスのクリーンアップを行う場合は、それを endOfClass に設定します。 |
assemblyResolution 設定
このセクションのすべての設定は、assemblyResolution 要素に属しています。
| エントリ | 既定値 | 説明 |
|---|---|---|
| パス | なし | 単体テストを検索して実行する場合、追加のアセンブリへのパスを指定できます。 たとえば、テスト アセンブリと同じディレクトリにない依存関係アセンブリにこれらのパスを使用します。 図形 { "path": "...", "includeSubDirectories": "true/false" }のパスを指定できます。 |
例:
{
"mstest": {
"assemblyResolution": {
{ "path": "...", "includeSubDirectories": "true/false" }
}
}
}
deployment 設定
このセクションのすべての設定は、deployment 要素に属しています。
| エントリ | 既定値 | 説明 |
|---|---|---|
| テスト実行完了後にデプロイディレクトリを削除する | ほんとう | テストの実行後に配置ディレクトリを保持するには、この値を false に設定します。 |
| テストソース依存関係をデプロイする | ほんとう | テスト ソース参照をデプロイするかどうかを示します。 |
| 有効 | ほんとう | 値を false に設定すると、テスト メソッドで指定した配置項目が配置ディレクトリにコピーされません。 |
例:
{
"mstest": {
"deployment": {
"deleteDeploymentDirectoryAfterTestRunIsComplete": true,
"deployTestSourceDependencies": true,
"enabled": true
}
}
}
output 設定
このセクションのすべての設定は、output 要素に属しています。
| エントリ | 既定値 | 説明 |
|---|---|---|
| captureTrace | ほんとう | 現在実行中のテストに関連付けられる Console.Write*、Trace.Write*、Debug.Write* API から送信されるテキスト メッセージをキャプチャします。 |
例:
{
"mstest": {
"output": {
"captureTrace": false
}
}
}
parallelism 設定
このセクションのすべての設定は、parallelism 要素に属しています。
| エントリ | 既定値 | 説明 |
|---|---|---|
| 有効 | 偽り | テスト並列化を有効にします。 |
| スコープ | クラス | 並列化のスコープ。
methodに設定できます。 既定の classは、特定のクラスのすべてのテストを順番に実行しますが、複数のクラスを並列で実行します。 |
| 労働者 | 0 | 並列化に使用するスレッド/ワーカーの数。 既定値は、現在のコンピューター上のプロセッサの数にマップされます。 |
例:
{
"mstest": {
"parallelism": {
"enabled": true,
"scope": "method",
"workers": 32
}
}
}
execution 設定
このセクションのすべての設定は、execution 要素に属しています。
| エントリ | 既定値 | 説明 |
|---|---|---|
| 空のデータソースを結論が出せないと見なす | 偽り |
trueに設定すると、空のデータ ソースは不確定と見なされます。 |
| considerFixturesAsSpecialTests | 偽り | Visual Studio、Visual Studio Code AssemblyInitialize および AssemblyCleanup ログの個別エントリとして、ClassInitialize、ClassCleanup、Test Explorer、 を表示するには、この値を [True] に設定します。 |
| mapInconclusiveToFailed | 偽り | テストが結果不確定の状態で完了した場合は、テスト エクスプローラーでスキップ状態にマップされます。 結果不確定のテストを失敗として表示する場合は、この値を true に設定します。 |
| mapNotRunnableToFailed | ほんとう | 実行不可能な結果を失敗したテストにマップするかどうかを示す値。 |
| クラスとアセンブリのクリーンアップ警告をエラーとして扱う | 偽り | クラスのクリーンアップの失敗をエラーとして表示するには、この値を true に設定します。 |
| ディスカバリーの警告をエラーとして処理する | 偽り | テスト検出の警告をエラーとして報告するには、この値を true に設定します。 |
例:
{
"mstest": {
"execution": {
"considerEmptyDataSourceAsInconclusive": false,
"considerFixturesAsSpecialTests": false,
"mapInconclusiveToFailed": true,
"mapNotRunnableToFailed": true,
"treatClassAndAssemblyCleanupWarningsAsErrors": false,
"treatDiscoveryWarningsAsErrors": false
}
}
}
timeout 設定
このセクションのすべての設定は、timeout 要素に属しています。
| エントリ | 既定値 | 説明 |
|---|---|---|
| assemblyCleanup | 0 | アセンブリ クリーンアップ メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 |
| assemblyInitialize | 0 | アセンブリ初期化メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 |
| クラスクリーンアップ (classCleanup) | 0 | クラス クリーンアップ メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 |
| クラス初期化 | 0 | クラス初期化メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 |
| テスト | 0 | テスト タイムアウトをグローバルに指定します。 |
| testCleanup | 0 | テスト クリーンアップ メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 |
| testInitialize | 0 | テスト初期化メソッドの各インスタンスに適用するタイムアウトをグローバルに指定します。 |
| useCooperativeCancellation | 偽り |
trueに設定すると、タイムアウトの場合、MSTest は CancellationToken の取り消しのみをトリガーしますが、メソッドの監視は停止しません。 この動作はよりパフォーマンスが高くなりますが、すべてのパスを通じてトークンを正しくフローさせるためにユーザーに依存します。 |
手記
指定された [Timeout] 属性は、グローバル タイムアウトをオーバーライドします。 たとえば、[AssemblyCleanup] 属性でマークされたメソッド上で [Timeout(1000)] を使用すると、グローバルな assemblyCleanup タイムアウトをオーバーライドします。
例:
{
"mstest": {
"timeout": {
"assemblyCleanup": 0,
"assemblyInitialize": 0,
"classCleanup": 0,
"classInitialize": 0,
"test": 0,
"testCleanup": 0,
"testInitialize": 0,
"useCooperativeCancellation": false
}
}
}
testconfig.json ファイルの例
次の JSON は、一般的な .testconfig.json ファイルの内容を示しています。 このコードをコピーし、自分のニーズに合わせて編集します。
ファイルの各要素には既定値があるため、省略可能です。
{
"platformOptions": {
},
"mstest": {
"execution": {
"mapInconclusiveToFailed" : true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests" : false,
},
"parallelism" : {
"enabled": true,
"scope": "method",
},
"output": {
"captureTrace": false
}
}
}
.NET