- - PR -
VS2008の単体テスト機能のテストコードの書き方について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-01-20 16:35
VS2008の単体テスト機能のテストコードの書き方について
VS2008PROで、単体テスト機能が標準装備されるようになっていますが、 これを利用してテストコードをコーディングしていくとき、 その書き方について迷っています。 現在複数のマシンに点在する電子書籍ファイルを一元管理するためのソフトを作成しているのですが、 リスト化した一覧を読み書きするメソッドの、テストコードの書き方がよくわかりませんので、 恐縮ですが皆さんのご意見を参考にさせていただきたいと思っています。
SaveBookListメソッドのテストを行おうとした場合(43行目)、 出力されたcsvファイルの正当性を判断する必要があると思うのですが、 そうすると47行目の前にLoadBookListないし、 別途csvファイルを読み込むメソッドを用意する必要が出てくるのではないかと思います。 そのためには「LoadBookListがテストをクリアしている」という前提が必要になると思うのですが、 読み込むcsvファイルの正当性のテストはどうなるのか、というところから突き詰めると、 どのようなテストコードを書けばよいのか悩んでしまいます。 仮にcsvを読み込むメソッドをテストクラス内に用意したとしても、 やはりそのテストは必要でしょうから結局堂々巡りになってしまう気がします。 皆さんはこのような場合、どうされるのがベストだとお考えでしょうか? | ||||
|
投稿日時: 2009-01-21 00:43
そもそも、CSV に出力されるはずの文字列を単純に比較するだけで良いと思います。
と出力して欲しいならば、出力結果を "1, aaa\r\n2, bbb" という文字列と比較するだけです。 _________________ C#と諸々 [ メッセージ編集済み 編集者: よこけん 編集日時 2009-01-21 00:44 ] | ||||
|
投稿日時: 2009-01-21 10:46
そういわれると「なるほど」という感じがしますね。 私としては出力メソッドのテストコードだから、 出力後のデータの検証が重要と考えていたのですが、 「出力する」という動作自体はFrameworkでサポートされていますので、 こちらが気にするところではなかったのかな・・・? ただ不安なのが、文字列は正しくても出力自体のコード (System.IO.File.WriteAllText等)を書き忘れていた場合に、 文字列の比較のみではミスを拾えないということですが、 この辺の一目見たらわかるような部分(ファイル出力に限らず)は、 テストコード内での検証は省いてもよいという意識でよいものでしょうか。 テスト駆動開発を意識したコーディングは初めてなので、 最初にどこまで突き詰めておくかの線引きがまだよくできていませんね(--; [ メッセージ編集済み 編集者: ひろめん 編集日時 2009-01-21 11:00 ] | ||||
|
投稿日時: 2009-01-21 11:07
すみません、書き方が悪かったです。
実際に生成された CSV ファイルの内容を読み取って、期待値と比較する、ということです。 > この辺は一目見たらわかるからということでテストコード内での検証は > 省いてもよいという意識でよいものでしょうか。 テスト可能なことならば、テストを極力用意した方が良いです。 テスト不可能、あるいは可能だけど労力の割に効果が薄いのならばテストを省くこともありますが、 そういった処理は別のクラスに切り離した方が良いです。 そのクラスにはテスト可能なコードを極力持たせません。 そして、「依存性の注入」パターンを適用することで、 テスト時はそのクラスの代わりにフェイクやモックを使用することができます。 _________________ C#と諸々 | ||||
|
投稿日時: 2009-01-21 12:21
毎回素早い回答ありがとうございます。
なんとなくですけれど、よこけんさんの仰りたい事を理解できました。 常に依存関係を意識し、できるだけその関係を疎にしておく必要があるのですね。 今までは機能を意味を小分けすることをメインにクラスを作成していたのですが、 もう少し抽象的に考えてみて、インターフェースの実装などを積極的に 取り入れてみたいと思います。 今回の件については、ファイルのI/O部分を切り離して、 モックを作成してみることにします。 |
1