[VisualStudio2022]いまさらLiveUnitTesting使ってみた

## はじめに

会社で利用しているVisualStudioがEnterpriseエディションということで、LiveUnitTestingが自由に使えたのでいまさらながら利用しどんな機能があったかの備忘録も兼ねて記事にしてみます。

## LiveUnitTestingとは

[Microsoft公式](https://learn.microsoft.com/ja-jp/visualstudio/test/live-unit-testing-intro?view=vs-2022)より、概要を抜粋すると以下の通りです。
>Live Unit Testing では、コードの変更に合わせて、自動的にリアルタイムで単体テストが実行されます。 これにより、安心してコードのリファクタリングと変更を行うことができます。 コードを編集すると、影響を受けたすべてのテストが Live Unit Testing によって自動的に実行され、変更によって回帰が発生していないことが確認されます。
Live Unit Testing では、単体テストによってコードが適切にカバーされているかどうかが示されます。 コード カバレッジがリアルタイムでグラフィカルに表示されます。 各コード行が含まれるテストの数と、単体テストによってカバーされていない行を、一目で確認できます。

コードを編集すると自動的にテストしリファクタリング結果で振る舞いが変わっていないかをコード編集しつつ確認できたり、単体テスト実装中にその場でテスト結果を確認できるなどリアルタイムに確認できる機能です。


## 操作

### 画面

[表示]→[その他のウィンドウ]→[Live Unit Testing ウィンドウ]から表示するか、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/e1f2483b-cd19-6ede-7143-f5cea5940ec7.png)

[テスト]→[Live Unit Testing]→[開始]からLive Unit Testingのウィンドウを表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/6fe72c6b-f5f8-8971-cd90-5f375a4023ef.png)

### 操作

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/eb037644-8e7c-8d1c-02c2-a8aa7c6154b6.png)

①：開始、一時停止・停止ボタン
- 名前通りの機能でありますが、開始によってLive Unit Testingを起動し、一時停止と停止で止めることができます。
開始で実行される範囲（テストプロジェクトAだけ実行してBは混乱するので除いてほしいみたいな）は②のプレイリストで編集でき後述します。
  - 開始の注意点としては、当然ですがテストプロジェクトが含まれないソリューションで開始しても何も起こらないです。
- 一時停止と停止の何が違うかですが、公式より振る舞いを抜粋すると
  >Live Unit Testing を一時停止すると、カバレッジの視覚化はエディターに表示されませんが、収集されたすべてのデータは保持されます。 Live Unit Testing を再開するには、Live Unit Testing メニューから [続行] を選びます。 Live Unit Testing で、一時停止中に行われたすべての編集を取得するために必要な作業が実行されて、グリフが適切に更新されます。

  とあり、ある程度まとまった編集をする際に変更の度にLive Unit Testingが動くのをやめたい場合は一時停止が有用ですし、作業が終わってもう確認が不要な場合は停止が良い感じでしょうか。
 自分が使っている限りは動作は軽く、作業に支障が出るような感じはなかったため単体テストがある程度作り込んであるならば基本動かしていても良いかなと思ってます。

②：プレイリストの編集

- プレイリストの編集を押下すると、以下のように各テストプロジェクトおよびテストメソッドに対してチェックをつけられるようになります。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/1429ea81-1a5c-283b-4ef5-4fb0261d4703.png)
- もう一度押下すればチェック状態を確定し、開始中であればそのまま自動でテスト確認を行ってくれます。
- どういった場合に使うかですが、例えばまだテストを作り込んでいないがプロジェクトとメソッド（Failするだけのメソッド）だけは設計等の兼ね合いで実装しているような場合、意図的な不合格なテストと本当に不備があってよくない実装あるいはテストの実装を見落としてしまわないようにプレイリストで適切な範囲を指定するのが大事だと思います。

③：フィルタ

- ③の箇所で合格しているテストや失敗したテストだけの一覧を見ることができます。
- 利用時には大体失敗したテストが気になると思うのでここでフィルタ表示すると効率的です。
 
あとはグループ化とか展開・折りたたみなどありますが見ての通りのため割愛します。

## 実装側での表示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/6c0c6d3a-69ae-fdb1-e49d-aa67c44d2f19.png)

実装側では上記のように行単位でチェックがつき、コードを編集しながらリアルタイムにテスト結果を確認できますし、その行にヒットするテストの数も確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/64d1e8dc-a6e3-1308-e11a-ea1cc3a9f76c.png)

さらに対象を選択することで、わざわざテストメソッド側を見に行かず、その場でデバッグも開始できます。

### テストプロジェクトとテストメソッドを含めるか除外するかの設定

[公式](https://learn.microsoft.com/ja-jp/visualstudio/test/live-unit-testing?view=vs-2022#include-and-exclude-test-projects-and-test-methods)より、以下のように設定することでテストプロジェクトが数百あるような大きなソリューションでLive Unit Testingの対象を選ぶのは大変であり以下のようなことができると明記されてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/4ba0f0ed-e3ce-7229-0674-744d92481e82.png)

特にプロジェクトでしばらくテスト対象で含めなくて良いものは3つ目の設定を利用してスキップするとチームメンバにも簡単に設定を反映させられるので便利ですね

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062357/d96692d5-c68b-50c3-4817-1edce9d24c9a.png)


## 参考＆公式のLive Unit Testingに関わる情報

https://devblogs.microsoft.com/visualstudio/live-unit-testing-in-visual-studio-2017-enterprise/

https://learn.microsoft.com/ja-jp/visualstudio/test/live-unit-testing-start?view=vs-2022

https://visualstudiomagazine.com/articles/2022/03/18/vs-2022-17-2-preview-2.aspx?admgarea=ALM