# 序文
C#での単体テストコードの書き方を、体系的に整理したいと思って作成しました。ご指摘あれば遠慮なくお申し付けください。
# 開発環境
- OS: Windows10
- IDE: Microsoft Visual Studio2019 ver16.5.1
- フレームワーク: ASP.NET Core 3.1
- テスト用フレームワーク: MSTest
# 手順
## 考え方
1. テスト対象のメソッドのうち、検証したい事項を明確化する
2. 実際にテスト対象のメソッドを呼び出して得た結果が予想通りであれば成功、失敗なら成功するまで繰り返す
3. テストコードのメソッドに戻り値や引数は基本的につけない
## 書き方
1. 戻り値、引数無しのメソッドを生成する
2. 結果を予想する
3. テスト対象のメソッドを呼び出し、その結果と予想を比較する
## 実例
今回テストするのはこちらのCalculationクラスのaddメソッド。
public class Calculation(){
public static int add(int a, int b){
return a + b;
}
}
テストコードはこちら。
[TestClass]
public class CalculationTest(){
[TestMethod]
public static void addTest(){
int x = 3;
int y = 5;
//予想している結果
var expected = 8;
//実際の結果
var actual = Calculation.add(x,y);
Assert.AreEqual(expected, actual);
}
}
今回検証したいのは、
- addメソッドが予想した通りの値を返すのか?
ということ。つまり、return a + b;
の部分。
これを検証するため、
- CalculationTestクラスを生成、そしてその中にaddTestメソッドを生成。
- 予想値と、Calculation.add()を呼び出して得た結果を、それぞれ
expected
とactual
に格納。 - Assert.AreEqual()で
expected
とactual
を比較。
成功すれば完了、失敗なら原因を探ってもう一度テストを実行する。
# 補足
今回はMSTestを使いましたが、NUnitやxUnitでも基本は同じです。ただし、属性名やメソッド名が微妙に違うことに留意してください。