【C#】自動テストの実装(MsTest)

自動テストとは

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

人の目でプログラムの実行結果を見て、多数のテストケース毎にテストする「手動テスト」とは違い、
テスト用モジュールを用いて、テストを行う手法です。

自動テストでは、一度作ったテストケースを繰り返し実行、再利用することできるため、
デグレード防止や再テストの工数削減に、役立てることができます。

ただ、メリットだけではなく、下記の様なデメリットも多くあります。

・対象プログラムが自動テストに適さない記載方法だった場合、自動テストの実装が困難。
・プログラム修正に伴い、自動テストソースの修正も発生する。(工数増大)
・ユーザ目線のビジュアル的なテスト(確認)には不向きな傾向がある。

こちらの記事では、C#、MsTestを利用した簡単なサンプルを例に自動テストを実施し、
自動テストのイメージを紹介できればと思います。

自動テストの実装

0.テスト対象プログラムの準備

まずは、自動テストを実施するプログラムを準備します。
今回は、下記の様な「文字列暗号化PG」を対象とし、
テスト用テキストが、期待通り「暗号」→「復号」されていることを確認します。

 

1.ターミナルでコマンド入力し、テスト用プロジェクトを作成します。

2.上記コマンドから、下記のテスト用ソースが自動生成されていることを確認します。(UnitTest1.cs)

3.テストを実行するため、テストプロジェクトをソリューションに追加します。

4.テストを実行するため、プロジェクト参照を追加します。

5.テストソースの実装
テスト実施手順として下記の通り、テストソースを実装します。

①.12行目でテスト用テキストを変数に設定
②.14行目で、文字列を暗号化
③.15行目で、暗号化した文字列を復号化
④.18行目で、正しく復号化されたことを検証(Assert)で確認
(「期待値(testText)」と「復号化文字(dec)」をAreEqual関数で比較し、同一であればテスト合格)

自動テストの実施

1.ターミナルより下記コマンドで、自動テストを実行

2.テスト結果
テスト結果として、合格1件が表示されテスト結果が期待値通りであったことがわかる。


最後に

今回実装した自動テストは、「メソッドの戻り値」を文字列の比較でテスト結果を判定しているが、
実際のテストでは、この様な単純なものばかりではなく、下記の様な検証も必要となる。

・対象のオブジェクトの型が同一やNullである
・スローされた例外が期待値通りである
・検証対象が複雑なクラスや、非公開(private)オブジェクトの状態を検証する必要がある。

そのため、自動テストをプロジェクトに採用する際には、
テストモジュールを実装する技術者にも相応のスキルが求められること、
自動テストを実施する範囲、利用するツール等を考慮する必要があります。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス