■36483 / inTopicNo.2) |
Re[1]: nunitのテストの仕方やメソッドの可視性 |
□投稿者/ biac (109回)-(2009/05/29(Fri) 16:25:57)
|
> biacさんの回答を見ると > ># 個人的には、 クラス名から察するに、 シングルトンにして public static AppConfig GetConfig() てな感じのインスタンス取得メソッドを用意するところ。 > >コンストラクタ内でファイル I/O やったりゴチャゴチャやるのは、 好みじゃないんだけど > コンストラクタで、I/Oするのは良くないのでしょうか?
良くないというか、 経験上痛い目にあってきた ( ようするに、 難儀なバグを仕込んできた f(^^; ) ので、 できることなら短くシンプルなコンストラクタにしたほうがいいよ、 ってくらいで。
で、 上の話は 2つに分かれてます。 ・ コンストラクタで複雑なことをしてるとハマることが多い (…ような気がする)。 ・ ファイル I/O のテストはみっちりやらないと怖いから、 独立してテストできるようにすべき。
あと、 書かなかったこととしては、 コンストラクタで複雑なことをやらせてるクラスは、 たいていテストしにくいような気がしてます。
余談だけど、 コンストラクタから呼び出しているメソッドを、 継承先でオーバーライドできるようにしちゃうのはダメですよ。 CA2214: http://msdn.microsoft.com/ja-jp/library/ms182331(loband).aspx
> 後テストなのですが、AppConfigは起動時に読込まれるみたいなので > <add key="key1" value="1" /> <--1〜100まで正常値だとします。 > この場合、境界値テスト? 0 1 100 101 文字列等...をテストすると、 > app.configをプログラムで更新するとしても、何度も何度もテストを1個づつ実行していかなければならない気がするのですが
これは何のテストをしたいのかな? ・app.config の value が正しく読み込めるかどうか? ( ReadConfig() メソッドのテスト ) ・app.config から読み込んだ値を検証するロジックが正しいかどうか? ( Validate() メソッドのテスト )
前者なら、 読み込みできたことを1回だけ確認できればいいだろうし。 後者なら、 0 1 100 101 文字列等... を Validate() メソッドに処理させてみればいい。 ( いちいち app.config を読み込む必要は無い、 ということ。 )
※ ここで、 「Validate() メソッドで検証する値は、 コンストラクタで app.config から読み込ませねばならない」、 という制約が付いてしまうと、 「テストのためには app.config を何回も書き換えて…」 って話になっちゃうわけです。
|
|