【C#】Riderで単体テストを自動実行した

# はじめに

今まで仕事でも個人的にもC#を書くときはVisual Studioを使っていて、十分満足していました。
しかしVisual StudioでLive Unit Testingを使用するにはEnterprise版を購入する必要がありつらい...。
でも自動ビルドと自動単体テストはしたい...。

ということで、思い切って前々から気になっていたJetBrainsの[Rider](https://www.jetbrains.com/ja-jp/rider/)に乗り換えてみました。
まだ使い始めて1ヶ月ほどですが、メインの単体テスト自動実行とその他のおまけについても書きたいと思います。

# 単体テストの自動化

まずは本題の単体テストの自動化についてですが、月々1600円のRider単体ではだめで、2060円のReSharper Ultimate + Riderのパックを買わないと使うことが出来ません(金額は2019/12/7時点のものです)。ただし、Riderを買ってしまっても差額の460円だけ払えばアップグレードできます。

Riderをインストールしたらプロジェクトを開いてまずは設定を行います。[File]->[Settings]を選択して設定画面を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/72b9b4d5-3c35-b6e0-250c-e222a4d9861f.png)

まずはPluginの項目を開き、dotCoverとdotTraceというプラグインが有効になっているか確認してください。
私はまずRiderだけ買って、そのあとReSharper Ultimate + Riderにアップグレードしたのでプラグインが無効になっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/6b141e7d-920e-33ec-8f50-b9e7cfd237b3.png)

続いて[Build, Execution, Deployment]->[Unit Testing]->[Continuous Testing]を開いて自動実行の設定をします。
デフォルトではビルド時に自動テストされるようになっています。
ファイルを保存したタイミング（Ctrl+Sを押したタイミング）でも実行したい方はSaveにチェックを入れます。なお、Saveにした場合でもビルド時にはテストが実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/ec8610df-a693-f8c6-0906-dba55cc0ee60.png)

これで基本の設定が出来たので、Settingsウィンドウは閉じます。
次に画面下部にある[Unit Tests]パネルを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/d97acf78-3121-16d6-dfb7-0c55eea0d10a.png)

デフォルトではExplorerというタブが表示され、ソリューションに含まれるテストの一覧が表示されています。
テストの自動実行などはSessionという単位で管理するので、自動実行したいテストを選択して右クリックからAppend Tests to Sessionをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/ff5f3577-ecaf-4f37-f3b1-c1e41123e2d4.png)

Sessionが作成されるので、Continuous testingの設定アイコンをクリックして、実行するテストの範囲を一覧から選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/485f6f69-2bd0-2e0a-6f6c-5fb25158dc57.png)

これでテスト自動実行の設定は完了です。ビルドしたりファイルを保存したりすると単体テストの結果がポップアップ表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/4b073f9e-46dd-ee26-25db-7058c7b94694.png)

# コードカバレッジの測定

ちなみに、このSessionの設定を使用してコードカバレッジを計測することが可能です。Cover Current Sessionをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/71742aec-a9cd-ecdb-7743-c7f50d07be87.png)

計測されたカバレッジは2種類の方法で見ることができます。ひとつめはサイドにあるUnit Tests Coverageパネルで、プロジェクト毎から関数毎まで様々なレベルでカバレッジを見ることが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/85eb5c17-d655-9366-047d-d36b2547149c.png)

もうひとつはメインのエディター画面で、行ごとのテスト状況が一目で見れるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/263cf9b1-0496-ed5d-54e3-e9eab4cf59c9.png)

これだけの機能が揃っていれば幸せな単体テストライフが送れることでしょう。

# 単体テスト自動実行で何が良かったか？

今さら書くまでもないことですが...。

- コードを修正したり実行したりするときにいち早く予期しない動作に気付けるようになった
- どこのコードがどれくら信頼できるのか視覚的にわかるようになった
- エラーしたテストを小まめに修正するのでテストを保守するモチベが上がった
- 単純に不具合が減った

# おまけ

## コードが見やすい

ここからはおまけですが、まずひとつめに単純にコードが綺麗で見やすいというのが挙げられます。
Visual StudioでもSemantic ColorizerとViasforeを入れて、行間やフォントを調整して...と見やすくする努力はしていましたが、Riderはそこのところを軽々と越えてデフォルトで見やすい。
引数名を自動で入れてくれるところとかもいいですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/8d23e15f-0ed8-5088-67b8-882bcc737a04.png)

ただ、個人的にはデフォルトの行間1.2が気に入らなかったので、行間を1.0に調整しています。
[Editor]->[Color Scheme]->[Color Scheme Font]のLine spacingから変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/8a50f41f-d3ef-e276-792a-99050d047dc7.png)

## 名前空間の修正が便利

ソースファイルやフォルダを移動したときに、名前空間の修正をする必要がありますが、それを簡単にやってくれます。
ファイルやフォルダを右クリックしてRefactor Thisを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/08f8cfca-0d40-ef89-13a2-e24a6d6e406d.png)

出てくるポップアップの中にAdjust Namespaceという項目があるのでこれを選択すると、フォルダ階層に応じて名前空間を修正してくれます。
参照している方も修正してくれるので安心です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/c502f27f-8c1c-09a8-48ef-3ea91ba8f44d.png)

## ILが見れる

そういうのがお好きな方だけですが...。[Tools]のIL Viewerからリアルタイムに指定コードのILが見れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124881/fb0fcbd4-68e7-34d2-9566-808029dc667b.png)

個人的には欲しかった機能...。

# 参考

[継続的なテストの使用](https://pleiades.io/help/rider/Work_with_Continuous_Testing.html)