メインコンテンツまでスキップ

第09章:dotnet test(CLI)も使えるようにする⌨️

この章は「IDE(Visual Studio)を開かなくても、テストを回して原因を特定できる」ようになる回だよ〜😊 CI(自動テスト)でもほぼ同じコマンドを使うから、ここ押さえると一気に“現場っぽさ”が出るやつ💪🔥


1) この章のゴール🎯✨

できるようになればOK👇

  • dotnet testソリューション/プロジェクト/フォルダ単位で実行できる
  • 1本だけテストを走らせる(フィルタ)できる
  • ✅ 失敗ログを読んで「どこが怪しいか」を絞れる
  • ✅ 結果(TRX)やカバレッジをファイルに残せる
  • ✅ CIでも困らない“CLIの型”が身につく

dotnet test は、成功なら終了コード 0 / 失敗があると 1 を返すので、CIが判定しやすい仕組みになってるよ🧠✅ (Microsoft Learn)


2) まず「どこで打つか」だけ迷子防止🧭🪟

基本は ソリューション(.sln)があるフォルダへ移動してから打つのがラク😊 (フォルダ指定でも動くけど、迷子が減る✨)


3) dotnet test のいちばん基本🧪✨

画像を挿入予定

dotnet testいろんな単位で実行できるよ👇(覚えやすい!)

  • .sln を指定
  • .csproj を指定
  • “今いるディレクトリ”を指定(省略したらこれ)
  • さらには DLL/EXE 指定もOK (Microsoft Learn)

✅ まずは普通に全部実行

dotnet test

✅ ソリューション指定(おすすめ)

dotnet test MyApp.sln

✅ テストプロジェクト指定(軽く回したいとき)

dotnet test tests\MyApp.Tests\MyApp.Tests.csproj

4) 「1本だけ実行」できるようになる(超重要)🔍🔥

ここが第9章の主役! 開発中は「全部回す」より「今いじってる所だけ回す」が速いから、手が止まらないよ🚀✨

4.1 テスト名を一覧で見る(走らせない)📃

dotnet test -t

-t|--list-tests は「発見したテスト一覧を出すだけ」だよ🧪 (Microsoft Learn)


4.2 フィルタで絞って実行する🎯

--filter が使える! (Microsoft Learn)

フィルタはこんな形👇 <property><operator><value> を組み合わせる(OR/AND もできる) (Microsoft Learn)

xUnit だと主にこのプロパティが使えるよ👇

✅ 例1:メソッド名の一部で絞る(いちばん手軽)✨

(operator省略だと FullyQualifiedName~ 扱いになるよ) (Microsoft Learn)

dotnet test --filter PriceCalculatorTests

✅ 例2:完全修飾名で“contains”絞り(確実)🧠

dotnet test --filter FullyQualifiedName~MyApp.Tests.PriceCalculatorTests

✅ 例3:表示名で絞る(DisplayNameを付けた場合)🏷️

dotnet test --filter DisplayName~"割引が上限を超えない"

✅ 例4:カテゴリで絞る(Traitで“カテゴリ”を付ける)🎛️

まずテストに Trait を付けるよ👇

using Xunit;

public class PriceCalculatorTests
{
[Fact]
[Trait("Category", "Fast")]
public void Tax_is_rounded()
{
Assert.True(true);
}
}

そしてCLIで絞る👇

dotnet test --filter Category=Fast

5) 「わざと失敗」してログに慣れる🚨➡️🔍

TDDって 失敗を味方にするから、ここで“赤の読み方”を練習しよ😊

手順(ミニ演習)🧪

  1. 既存テストの Assert をわざと間違える(例:Assert.True(false)
  2. そのテストだけ回す👇
dotnet test --filter FullyQualifiedName~Tax_is_rounded
  1. エラーメッセージで「期待値/実際値」「どの行」が出るのを観察👀✨

6) ログを読みやすくする小ワザ集🛠️✨

6.1 詳細ログがほしい(原因調査向け)🧾

-v|--verbosity があるよ (Microsoft Learn) (例)

dotnet test -v detailed

6.2 Terminal Logger のON/OFF(表示が崩れる時など)🖥️

--tl:[auto|on|off] があって、環境チェックして自動ONにもできるよ (Microsoft Learn) (例)

dotnet test --tl:off

7) 結果をファイルに残す(TRX)📁✅

CIやあとからの共有で便利なのが TRX(テスト結果ファイル)--logger で指定できるよ (Microsoft Learn)

✅ TRX を出す(ファイル名も指定)

dotnet test --logger "trx;LogFileName=test-results.trx"

✅ 出力先フォルダを固定する

--results-directory は結果の置き場を指定できて、無ければ作ってくれるよ(既定は TestResults) (Microsoft Learn)

dotnet test --logger "trx;LogFileName=test-results.trx" --results-directory .\artifacts\TestResults

8) “固まる/落ちる”系のトラブルを追う🕵️‍♀️💥

8.1 落ちる犯人探し:--blame 🧷

テストホストがクラッシュする時に、実行順を記録してくれるモードだよ (Microsoft Learn)

dotnet test --blame

8.2 さらに深掘り:--diag(診断ログ)🧠

テストプラットフォームの診断ログをファイルに出せるよ (Microsoft Learn)

dotnet test --diag .\artifacts\diag\test.diag.txt

9) 速く回すための“定番オプション”⚡🐢➡️🚀

9.1 すでにビルド済みなら --no-build 🌪️

--no-build は「ビルドせずにテスト実行」+暗黙で --no-restore も入るよ (Microsoft Learn)

dotnet test --no-build

9.2 さらに restore も省略(状況が安定してる時)📦

dotnet test --no-restore

体感ルール: ✅ ふだんは dotnet test ✅ 速さが欲しい時は dotnet test --no-build ✅ CIは “ビルド→テスト” を分けることが多いよ😊


10) カバレッジもCLIで取れる🧪📊✨(おまけだけど強い)

--collect でデータコレクタを有効化できて、カバレッジも取れるよ (Microsoft Learn) 特に XPlat Code Coverage は Coverlet を使う方式として案内されてるよ (Microsoft Learn)

10.1 事前:カバレッジ用パッケージを追加(テストプロジェクト)

(CI例だけど分かりやすいので同じことやる感じ) (Microsoft Learn)

dotnet add .\tests\MyApp.Tests\MyApp.Tests.csproj package coverlet.collector

10.2 実行(カバレッジ取得)

dotnet test --collect:"XPlat Code Coverage" --results-directory .\artifacts\TestResults

11) xUnit で dotnet test が動く最低条件(ハマりやすい)🧩😵‍💫

「テストが見つからないんだけど…?」ってなりがちなので先に予防線😊

  • xUnit の dotnet test 実行は、VSTest 経由なら xunit.runner.visualstudio 参照でサポートされるよ (xUnit.net)
  • xunit.runner.visualstudio は xUnit v1/v2/v3 を走らせられる VSTest アダプタだよ (NuGet)

もし「No test is available」と出たら、まず ✅ Microsoft.NET.Test.Sdkxunit(または xunit.v3) ✅ xunit.runner.visualstudio がテストプロジェクトに入ってるか見よ〜👀✨(ここが9割)


12) AIの使いどころ(第9章は相性よすぎ)🤖💡✨

CLIは“暗記ゲー”になりがちだから、AIでメモ化しちゃお😊

おすすめプロンプト例🪄

  • 「このテスト名で dotnet test --filter を作って(3パターン)」
  • 「この失敗ログから、原因候補→確認手順を順番に」
  • 「この章のコマンドを“チートシート1枚”にまとめて」

13) ミニ課題(コミット単位まで)📝🎁

課題A:1本だけ実行できるようにする🎯

  • --list-tests でテスト名を確認
  • --filter で狙った1本を実行
  • できたらスクショ or コマンドを README に貼る✨

課題B:わざと失敗→直す🚦

  • 1本をわざと失敗させる
  • --filter でその1本だけ回す
  • 直してGreenに戻す💚

提出物(おすすめ)📦

  • docs/testing-cli-cheatsheet.md(自分用コマンド集)
  • artifacts/TestResults/(TRXが出る設定の確認)

14) まとめ🎉

  • dotnet test は **CIでもそのまま使う“基本スキル”**🧪✨ (Microsoft Learn)
  • --filter--list-tests が使えると、TDDの回転が爆速になる🚀 (Microsoft Learn)
  • つらいときは --blame--diag で深掘りできる🕵️‍♀️ (Microsoft Learn)

(最新メモ🗓️)この章の前提に関わる“今”の情報だけ置いとくね

  • .NET 10 は 10.0.2(2026-01-13)、SDK は 10.0.102 が案内されてるよ (Microsoft)
  • .NET 10.0.2 は Windows Update/WSUS でも配布される形になってるよ (Microsoft サポート)

次の章(第10章)がもし「VS Code補足」なら、**CLI×VS Code の“気持ちよく回る最小構成”**を、迷子ゼロ手順で書けるよ😊🧩✨