run-tests
`dotnet test` を使って .NET のテストを実行します。「run tests」「test filter」「TRX report」「blame-hang」などのキーワードが出た際や、テストプラットフォーム(VSTest または Microsoft.Testing.Platform)の検出、テストフレームワーク(MSTest・xUnit・NUnit・TUnit)の特定、フィルター適用、テスト実行エラーのトラブルシューティングが必要な場面で使用してください。`--filter-class`・`--blame-hang-timeout`・`--report-trx` などのオプション指定にも対応します。なお、テストコードの生成・CI/CDパイプラインの設定・テストロジックのデバッグには使用しないでください。
description の原文を見る
> Runs .NET tests with dotnet test. Use when user says "run tests", "run my tests", "run these tests", "execute tests", "dotnet test", "test filter", "filter by category", "filter by class", "combine filters", "run only specific tests", "integration tests", "unit tests", "tests not running", "hang timeout", "blame-hang", "blame-crash", "crash dump", "TRX report", "TRX", "test report", "generate TRX", "TUnit", "treenode-filter", "target framework", "multi-TFM", or needs to detect the test platform (VSTest or Microsoft.Testing.Platform), identify the test framework, apply test filters, or troubleshoot test execution failures. Covers MSTest, xUnit, NUnit, and TUnit across both VSTest and MTP platforms. Also use for --filter-class, --filter-trait, --report-trx, --logger trx, --blame-hang-timeout, and other platform-specific filter and reporting syntax. DO NOT USE FOR: writing or generating test code, CI/CD pipeline configuration, or debugging failing test logic.
SKILL.md 本文
.NET テストの実行
テストプラットフォームとフレームワークを検出し、dotnet test を使用してテストを実行し、フィルタを適用します。
使用する場合
- ユーザーが .NET プロジェクトでテストを実行したい場合
- ユーザーがフィルタを使用してテストのサブセットを実行する必要がある場合
- ユーザーがテストプラットフォーム(VSTest vs MTP)またはフレームワークの検出について支援が必要な場合
- ユーザーが自分のセットアップの正しいフィルタ構文を理解したい場合
使用しない場合
- ユーザーがテストコードを書いたり生成したりする必要がある場合(MSTest の場合は
writing-mstest-testsを使用、他のフレームワークの場合は一般的なコーディング支援を使用) - ユーザーが VSTest から MTP への移行が必要な場合(
migrate-vstest-to-mtpを使用) - ユーザーが再ビルドなしで失敗したテストを反復処理したい場合(
mtp-hot-reloadを使用) - ユーザーが CI/CD パイプラインの設定が必要な場合(CI 固有のスキルを使用)
- ユーザーがテストをデバッグする必要がある場合(デバッグスキルを使用)
入力
| 入力 | 必須 | 説明 |
|---|---|---|
| プロジェクトまたはソリューションパス | いいえ | テストプロジェクト(.csproj)またはソリューション(.sln)へのパス。デフォルトはカレントディレクトリ |
| フィルタ式 | いいえ | 特定のテストを選択するためのフィルタ式 |
| ターゲットフレームワーク | いいえ | 実行対象のターゲットフレームワークモニカー(例:net8.0) |
重要なルール — クロスプラットフォームエラーを回避
以下は最も一般的なエージェントの間違いです。進める前によく理解してください:
| ルール | 理由 |
|---|---|
MTP プロジェクトでは --logger trx を使用しない | MTP は --report-trx を使用します(TrxReport 拡張機能パッケージが必要) |
VSTest プロジェクトでは --report-trx を使用しない | VSTest は --logger trx を使用します |
.NET SDK 10+ で -- --arg を使用しない | SDK 10+ は MTP 引数を直接渡します:dotnet test --project . --report-trx |
.NET SDK 8/9 で MTP の -- を省略しない | SDK 8/9 ではセパレータが必須です:dotnet test -- --report-trx |
MTP 上の xUnit v3 では --filter "ClassName=..." を使用しない | MTP 上の xUnit v3 は --filter-class、--filter-method、--filter-trait を使用します |
| SDK 10+ でベアの位置引数パスを使用しない | --project <path> または --solution <path> を使用してください |
MTP プロジェクトでは --blame を使用しない | MTP は --blame-crash と --blame-hang-timeout を別々に使用します(それぞれ拡張機能パッケージが必要) |
MTP では --collect "Code Coverage" を使用しない | MTP は --coverage を使用します(CodeCoverage 拡張機能パッケージが必要) |
ワークフロー
クイックリファレンス
| プラットフォーム | SDK | コマンドパターン |
|---|---|---|
| VSTest | すべて | dotnet test [<path>] [--filter <expr>] [--logger trx] |
| MTP | 8 または 9 | dotnet test [<path>] -- <MTP_ARGS> |
| MTP | 10+ | dotnet test --project <path> <MTP_ARGS> |
常に確認するべき検出ファイル(順序通り):global.json → .csproj → Directory.Build.props → Directory.Packages.props
ステップ 1:テストプラットフォームとフレームワークを検出
- プロジェクトディレクトリで
dotnet --versionを実行して SDK バージョンを確認します。これによりglobal.jsonの SDK ピニング対応します。 global.jsonを読む — .NET SDK 10+ で"test": { "runner": "Microsoft.Testing.Platform" }がある場合、これが MTP の確実な合図 です。存在する場合、プロジェクトは MTP と SDK 10+ 構文を使用します(--セパレータなし)。.csproj、Directory.Build.props、およびDirectory.Packages.propsを読んでフレームワークパッケージと MTP プロパティを確認します。3 つのファイルすべてを常に確認してください — MTP プロパティは個別の.csprojファイルではなくDirectory.Build.propsに設定されることがよくあります。- 完全な検出ロジック(SDK 8/9 の合図、フレームワーク識別)については、
platform-detectionスキルを参照してください。
各ファイルで確認すべき内容:
| ファイル | 確認項目 | 意味 |
|---|---|---|
global.json | "test": { "runner": "Microsoft.Testing.Platform" } | SDK 10+ の MTP |
global.json | "sdk": { "version": "..." } | SDK バージョン(-- セパレータの動作を決定) |
.csproj | <TestingPlatformDotnetTestSupport>true | SDK 8/9 の MTP |
.csproj | MSTest、xunit.v3、NUnit、TUnit パッケージ | フレームワークの特定 |
.csproj | Microsoft.NET.Test.Sdk + テストアダプタ | VSTest(上記の MTP 合図でオーバーライドされていない限り) |
.csproj | <TargetFrameworks>(複数形) | マルチ TFM — --framework が必要な場合がある |
Directory.Build.props | <TestingPlatformDotnetTestSupport>true | SDK 8/9 の MTP(.csproj ではなくここに設定されることが多い) |
Directory.Packages.props | 集中管理されたテストパッケージバージョン | CPM リポジトリのフレームワーク特定 |
クイック検出まとめ:
| 合図 | 意味 |
|---|---|
global.json に "test": { "runner": "Microsoft.Testing.Platform" } がある | SDK 10+ の MTP — 引数を直接渡す、-- なし |
csproj または Directory.Build.props に <TestingPlatformDotnetTestSupport>true がある | SDK 8/9 の MTP — -- 後に引数を渡す |
| どちらの合図もない | VSTest |
ステップ 2:テストを実行
VSTest(すべての .NET SDK バージョン)
dotnet test [<PROJECT> | <SOLUTION> | <DIRECTORY> | <DLL> | <EXE>]
一般的なフラグ:
| フラグ | 説明 |
|---|---|
--framework <TFM> | マルチ TFM プロジェクトで特定のフレームワークをターゲット(例:net8.0) |
--no-build | ビルドをスキップし、以前にビルドされた出力を使用 |
--filter <EXPRESSION> | 選択したテストを実行(ステップ 3 を参照) |
--logger trx | TRX 結果ファイルを生成 |
--collect "Code Coverage" | Microsoft コードカバレッジを使用してコードカバレッジを収集(組み込み、常に利用可能) |
--blame | ブレームモードを有効にしてホストをクラッシュさせるテストを検出 |
--blame-crash | テストホストがクラッシュしたときにクラッシュダンプを収集 |
--blame-hang-timeout <duration> | テストが期間より長くハングした場合中止(例:5min) |
-v <level> | 詳細度:quiet、minimal、normal、detailed、diagnostic |
.NET SDK 8 または 9 での MTP
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport> の場合、dotnet test は MTP へのブリッジですが、VSTest スタイルの引数解析を使用します。MTP 固有の引数は -- 後に渡す必要があります:
dotnet test [<PROJECT> | <SOLUTION> | <DIRECTORY> | <DLL> | <EXE>] -- <MTP_ARGUMENTS>
.NET SDK 10+ での MTP
global.json ランナーが Microsoft.Testing.Platform に設定されている場合、dotnet test は -- なしで MTP 引数をネイティブに理解します:
dotnet test
[--project <PROJECT_OR_DIRECTORY>]
[--solution <SOLUTION_OR_DIRECTORY>]
[--test-modules <EXPRESSION>]
[<MTP_ARGUMENTS>]
例:
# プロジェクト内のすべてのテストを実行
dotnet test --project path/to/MyTests.csproj
# プロジェクトを含むディレクトリ内のすべてのテストを実行
dotnet test --project path/to/
# ソリューション内のすべてのテストを実行(sln、slnf、slnx)
dotnet test --solution path/to/MySolution.sln
# ソリューションを含むディレクトリ内のすべてのテストを実行
dotnet test --solution path/to/
# MTP フラグを使用して実行
dotnet test --project path/to/MyTests.csproj --report-trx --blame-hang-timeout 5min
注:.NET 10+ の
dotnet test構文は、VSTest 構文のようなベアの位置引数を受け入れません。ターゲットを指定するには--project、--solution、または--test-modulesを使用してください。
一般的な MTP フラグ
これらのフラグは両方の SDK バージョンの MTP に適用されます。SDK 8/9 では -- 後に渡す;SDK 10+ では直接渡します。
組み込みフラグ(常に利用可能):
| フラグ | 説明 |
|---|---|
--no-build | ビルドをスキップし、以前にビルドされた出力を使用 |
--framework <TFM> | マルチ TFM プロジェクトで特定のフレームワークをターゲット |
--results-directory <DIR> | テスト結果出力用のディレクトリ |
--diagnostic | テストプラットフォーム用の診断ログを有効化 |
--diagnostic-output-directory <DIR> | 診断ログ出力用のディレクトリ |
拡張機能依存フラグ(対応する拡張機能パッケージが登録されている必要があります):
| フラグ | 必須 | 説明 |
|---|---|---|
--filter <EXPRESSION> | フレームワーク固有(すべてのフレームワークがサポートしているわけではない) | 選択したテストを実行(ステップ 3 を参照) |
--report-trx | Microsoft.Testing.Extensions.TrxReport | TRX 結果ファイルを生成 |
--report-trx-filename <FILE> | Microsoft.Testing.Extensions.TrxReport | TRX 出力ファイル名を設定 |
--blame-hang-timeout <duration> | Microsoft.Testing.Extensions.HangDump | テストが期間より長くハングした場合中止(例:5min) |
--blame-crash | Microsoft.Testing.Extensions.CrashDump | テストホストがクラッシュしたときにクラッシュダンプを収集 |
--coverage | Microsoft.Testing.Extensions.CodeCoverage | Microsoft コードカバレッジを使用してコードカバレッジを収集 |
いくつかのフレームワーク(例:MSTest)はデフォルトで共通の拡張機能をバンドルしています。その他は明示的なパッケージ参照が必要な場合があります。フラグが認識されない場合、対応する拡張機能パッケージがプロジェクトで参照されているか確認してください。
代替 MTP 呼び出し
MTP テストプロジェクトはスタンドアロン実行可能ファイルです。dotnet test を超えて、直接実行できます:
# ビルドして実行
dotnet run --project <PROJECT_PATH>
# 以前にビルドされた DLL を実行
dotnet exec <PATH_TO_DLL>
# 実行ファイルを直接実行(Windows)
<PATH_TO_EXE>
これらの代替呼び出しは MTP コマンドライン引数を直接受け入れます(-- セパレータ不要)。
ステップ 3:フィルタリングされたテストを実行
各プラットフォームとフレームワークの組み合わせの完全なフィルタ構文については、filter-syntax スキルを参照してください。重要なポイント:
- VSTest(MSTest、xUnit v2、NUnit):
=、!=、~、!~演算子を使用するdotnet test --filter <EXPRESSION> - MTP -- MSTest と NUnit:VSTest と同じ
--filter構文;SDK 8/9 では--後に、SDK 10+ では直接渡す - MTP -- xUnit v3:
--filter-class、--filter-method、--filter-traitを使用(VSTest 式構文ではない) - MTP -- TUnit:パスベースの構文を使用する
--treenode-filter
検証
- テストプラットフォーム(VSTest または MTP)が正しく識別されました
- テストフレームワーク(MSTest、xUnit、NUnit、TUnit)が正しく識別されました
- 検出されたプラットフォームと SDK バージョンに対して正しい
dotnet test呼び出しが使用されました - フィルタ式がプラットフォームとフレームワークに適切な構文を使用していました
- テスト結果がユーザーに明確に報告されました
一般的な落とし穴
| 落とし穴 | 解決策 |
|---|---|
VSTest プロジェクトで Microsoft.NET.Test.Sdk が不足している | テストが検出されません。<PackageReference Include="Microsoft.NET.Test.Sdk" /> を追加してください |
MTP 上の xUnit v3 で VSTest --filter 構文を使用 | MTP 上の xUnit v3 は --filter-class、--filter-method などを使用します — VSTest 式構文ではありません |
.NET SDK 8/9 で -- なしで MTP 引数を渡す | .NET 10 以前は MTP 引数が -- 後に必須:dotnet test -- --report-trx |
.NET SDK 10+ で -- --arg セパレータを使用 | SDK 10+ は MTP 引数を直接渡します — -- セパレータを使用しないでください |
MTP に --logger trx または VSTest に --report-trx を使用 | 各プラットフォームに独自の TRX フラグがあります — 重要なルールテーブルを確認してください |
MTP 合図について .csproj のみをチェック | Directory.Build.props と Directory.Packages.props も常に確認してください — MTP プロパティはそこに設定されることがよくあります |
| SDK 10+ でベアの位置パス引数を使用 | SDK 10+ は名前付きフラグが必須:--project <path> または --solution <path> |
トラブルシューティング
一般的なエラーメッセージとその解決方法:
| エラー | 原因 | 修正 |
|---|---|---|
No test is available または No test matches the given testcase filter | プラットフォーム/フレームワークの誤ったフィルタ構文、またはテストが検出されない | フィルタ構文がプラットフォームと一致することを確認します(filter-syntax スキルを参照)。検出の問題の場合、テスト SDK とアダプタパッケージがインストールされているか確認してください |
The --report-trx option is unrecognized | MTP 拡張機能パッケージが参照されていない、または MTP フラグを VSTest プロジェクトで使用している | MTP の場合 <PackageReference Include="Microsoft.Testing.Extensions.TrxReport" /> を追加するか、VSTest の場合 --logger trx を使用してください |
The --blame-hang-timeout option is unrecognized | MTP で HangDump 拡張機能が不足している | <PackageReference Include="Microsoft.Testing.Extensions.HangDump" /> を追加してください |
error NETSDK1045: The current .NET SDK does not support targeting .NET X.0 | global.json の SDK バージョンがプロジェクトのターゲットフレームワークと一致していない | global.json SDK バージョンを更新するか、必要な SDK をインストールしてください |
The test runner process exited with non-zero exit code | MTP テストホストがクラッシュしたかテスト失敗 | 診断用のクラッシュダンプを収集するために --blame-crash(MTP)または --blame(VSTest)で実行してください |
No test source files were found / No test project found | dotnet test が指定されたパスでテストプロジェクトを見つけられない | パスを明示的に指定:dotnet test <path/to/project.csproj>(VSTest)または dotnet test --project <path>(SDK 10+) |
| テストが検出されたが 0 が実行された | フィルタ式がテストと一致しない | フィルタプロパティ名と値を再確認します。一般的なタイプミス:TestCategory(MSTest)vs Category(NUnit)vs trait 構文(xUnit) |
.NET SDK 10+ で MTP 引数に -- を使用 | .NET 10+ では MTP 引数を直接渡します:dotnet test --project . --blame-hang-timeout 5min — -- --blame-hang-timeout を使用しないでください | |
| マルチ TFM プロジェクトがすべてのフレームワークのテストを実行 | 特定のフレームワークをターゲットするために --framework <TFM> を使用してください | |
global.json ランナー設定が無視される | .NET 10+ SDK が必須です。より古い SDK では、代わりに <TestingPlatformDotnetTestSupport> MSBuild プロパティを使用してください | |
TUnit --treenode-filter が認識されない | TUnit は MTP のみです。.NET SDK 10+ では dotnet test を使用し、より古い SDK では VSTest モード dotnet test が TUnit をサポートしていないため dotnet run を使用してください |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dotnet
- リポジトリ
- dotnet/skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/dotnet/skills / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。