背景
リファクタリングをしたいけど、既存コードのテストコードは書きたくない(心が折れた)ので、リファクタリングする時に一緒にテストコードを書いていくことにします。
ですが、適切かつ妥当なテストが行えているかの判断が難しいと考えています。
だからといって、テストコードの設計書を書きたくないのです。
なので、テスト対象を多くしてもテスト範囲を小さくすることで、単体テストの妥当性の判断をできる様にします。
諦めること
- プレゼンテーション層の単体テスト
- 他テストで担保する
- リフレクションを使わないこと
- 一連の処理はある程度妥協する
- private関数だらけになってしまうこと
- クラス設計が適切であればそこまで気にならないはず。
方針
コード
- 関数は小さな処理のみとする
- 条件は全て関数にする
- 計算処理は全て関数にする
- public関数は判定処理 および 別関数呼び出し とする
class Hoge {
public String exec(String value) {
if (isHoge(value)) {
getHoge();
}
return null;
}
private Boolean isHoge(String value) {
return value === "hoge";
}
private String getHoge() {
// ...何らかの処理
}
}
テストコード
- 関数ごとにクラスを作成する
- ファイル内にテスト設計を書く
/*
※READMEに書いても良いかも
# テスト観点
- 引数の型、値による結果を確認
# テストケース
## 正常系
### ①空文字
- テストデータ
- 空文字
- 期待値
- false
## 準正常系
なし
## 異常系
### ①引数が不正な型
- テストデータ
- 1(int)
- 期待値
- IllegalArgumentException
*/
class Hoge_isHogeTest{
public test_正常系_空文字() {
// ...何らかの処理
}
public test_異常系_引数が不正な型() {
// ...何らかの処理
}
}