vstest.console.exeで行うUnitTestをアタッチ→デバッグする

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

VisualStudio2022で書いたC#のコードをUnitTestするときに、VS2022の入っているPCでUnitTest実行するときにはテストエクスプローラーを使って実行したり、デバッグもできる。

こんな感じ。

ただ、今回は自分のVS2022の入ったPCではなくて、別のPCでUnitTestを実行し、かつデバッグしたい。

以前、別のPCでvstest.console.exeを使ってUnitTestする方法を調べたが、それに加えてデバッグ(breakを張って止めたり、その時の変数値を見たり)したい。

qiita.com

前提

VisualStudio2022 .NET6

必要ツールのダウンロードページ
https://visualstudio.microsoft.com/ja/downloads/

そこから、下記をダウンロード、インストールしておく。

やり方

まずset VSTEST_HOST_DEBUG=1を行ってから、vstest.console.exeを実行する。

サンプルバッチとアタッチのしかた

TestProject1.dllというUniTestのdllを使ってテスト実行するとして、
そのdllと同じフォルダに下記のようなバッチを置いて、実行する。
(実行するのは、VSの入っているPCではなくテスト対象のPC上。)

cd %~dp0
set VSTEST_HOST_DEBUG=1
set VSTEST="C:\Program Files (x86)\Microsoft Visual Studio\2022\TestAgent\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"
%VSTEST% "TestProject1.dll" /platform:x64 /inIsolation /Logger:trx
pause

テスト対象のPC上でバッチを実行すると、UnitTest実行しているコマンドプロンプト上で

ホスト デバッグが有効です。続行するにはデバッガーをテスト ホスト プロセスにアタッチしてください。
Process Id: 7096, Name: testhost

と表示される。(上記のように出てきて待ってくれるので、UnitTestのコードにアタッチ用の待ち処理を入れる必要はない)

ここで、VisualStudioが入ったほうのPCから、

メニュー > [デバッグ] > [プロセスにアタッチ]

を押し、リモートPCのアドレスを選択して、上で出たプロセスにアタッチする。

これで、テスト対象のPC上で実行されているUnitTestにアタッチができた。

参考

テストエージェントとリモートデバッグツールのダウンロードページ(MS)

Download Visual Studio Tools - Install Free for Windows, Mac, Linux

以前の記事(vstest.console.exeで別PCでUnitTest)

【C++】UnitTest(C ++用Microsoft単体テストフレームワーク/vstest.Console.exe)の使い方概要 - Qiita

以前の記事(リモートデバッグのやり方)

[VisualStudio]VisualStudio2019でリモートデバッグを行う(C#の場合) - Qiita