これまで単体テストを使用したことがないので、CxxTest を試してみます。関数が std::vector を正しくソートするかどうかを確認するテストを作成しました。最初に、ベクターがソートされていないときにテストが失敗することを確認し、次に健全性チェックとして std::sort が機能するかどうかをテストしました (もちろん、機能しました)。ここまでは順調ですね。
次に、独自のソート関数を書き始めました。しかし、私は間違いを犯し、関数が正しくソートされませんでした。私のテストでは、並べ替え中のベクトルの中間状態が出力されなかったため、並べ替え関数のどこで問題が発生したかを判断するのが困難でした。私はcout
自分のバグを見つけるためにステートメント (デバッガーを使用することもできた) を使用することになり、並べ替え関数が機能することを確認するまで単体テストを使用しませんでした。
ここで何か間違ったことをしていますか?単体テストは次のように簡単だと思いました
1) テストを書きます
2) 関数を書きます
3) テスト関数を書きます
4) テストが失敗したら関数を修正します
5) テストが通るまで 3 と 4 を繰り返します
私が使用したプロセスはもっと似ていました
1) テストを書く
2) 関数を書く
3) 関数をテストする
4) テストが失敗した場合、正しく動作するまで関数をデバッグする
5) 3 を繰り返す (関数が動作することが既にわかっている場合でも)
私のソート関数の設計は、私が書いたテストによって駆動されていなかったので、私のプロセスは真の TDD ではなかったように感じます。もっとテストを書くべきでしたか? たとえば、ベクトルがソートされているときの中間状態をチェックするテストなどです。