C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: nunitのテストの仕方やメソッドの可視性


(過去ログ 63 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■36476 / inTopicNo.1)  nunitのテストの仕方やメソッドの可視性
  
□投稿者/ XX (5回)-(2009/05/29(Fri) 14:33:30)

分類:[.NET 全般] 

下記で昨日質問させていただいたものです。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=36400
biacさんどうもありがとうございました。

AppConfigクラス
  ConfigurationManagerクラスを使ってフィールドに値を格納するメソッド
  格納した値を検査するメソッド
このようなクラスを作成する場合、皆さんはどういうクラスにするのでしょうか?
色々な方法があると思うのですが、私は
  private void ReadConfig()
private void Validate()
として、コンストラクタでどちらも実行し、インスタンスが作成できれば読込み及びチェックが完了した状態にし
Mainから必要なクラスにのみこのAppConfigインスタンス(もしくわ値のみ)を渡してあげてました。

biacさんの回答を見ると
># 個人的には、 クラス名から察するに、 シングルトンにして public static AppConfig GetConfig() てな感じのインスタンス取得メソッドを用意するところ。
>コンストラクタ内でファイル I/O やったりゴチャゴチャやるのは、 好みじゃないんだけど
コンストラクタで、I/Oするのは良くないのでしょうか?

後テストなのですが、AppConfigは起動時に読込まれるみたいなので
<add key="key1" value="1" /> <--1〜100まで正常値だとします。
この場合、境界値テスト? 0 1 100 101 文字列等...をテストすると、
app.configをプログラムで更新するとしても、何度も何度もテストを1個づつ実行していかなければならない気がするのですが
その辺うまい方法等ないでしょうか?
宜しくお願いします。

nunitのバージョン 2.5.0.9122
.netframeworkバージョン 2.0
visual studio2008
引用返信 編集キー/
■36483 / inTopicNo.2)  Re[1]: nunitのテストの仕方やメソッドの可視性
□投稿者/ biac (109回)-(2009/05/29(Fri) 16:25:57)
biac さんの Web サイト
> 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 を何回も書き換えて…」 って話になっちゃうわけです。
引用返信 編集キー/
■36484 / inTopicNo.3)  Re[2]: nunitのテストの仕方やメソッドの可視性
□投稿者/ XX (7回)-(2009/05/29(Fri) 16:37:35)
biacさんご回答ありがとうございます。
お世話になっております。

>あと、 書かなかったこととしては、 コンストラクタで複雑なことをやらせてるクラスは、 たいていテストしにくいような気がしてます。
はい。大変やりにくいです。
下記で質問させて頂きましたが、AppConfigのValidateをテストするために、リフレクションを使用しないといけない為、面倒で複雑になってしまいました。クラスを書き直そうかと思います。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=36478

>余談だけど、 コンストラクタから呼び出しているメソッドを、 継承先でオーバーライドできるようにしちゃうのはダメですよ。
勉強になります。

>後者なら、 0 1 100 101 文字列等... を Validate() メソッドに処理させてみればいい。 ( いちいち app.config を読み込む必要は無い、 ということ。 )
すみません。考えたらそうですね。。
やはり、コンストラクタはシンプルにし、重要なメソッド(テストが必要だと思われる)はPublic宣言してテストが簡単に出来るようにしていった方が、最終的に良さそうですね。
引用返信 編集キー/
■36488 / inTopicNo.4)  Re[3]: nunitのテストの仕方やメソッドの可視性
□投稿者/ XX (9回)-(2009/05/29(Fri) 18:52:58)
こちらも閉じます。

biacさんどうもありがとうございました。
助かりました。
解決済み
引用返信 編集キー/
■36524 / inTopicNo.5)  Re[4]: nunitのテストの仕方やメソッドの可視性
□投稿者/ biac (113回)-(2009/05/30(Sat) 20:33:39)
biac さんの Web サイト
解決済みではありますが、 C# 2008 EE + NUnit 2.5 で実際にやってみました。
→ [TDD の練習(5)] app.config を読み込んで保持していてくれるオブジェクト
http://bluewatersoft.cocolog-nifty.com/blog/2009/05/tdd-5-appconfig.html

# ちょっと思い描いてたのとは違って、 Validate() メソッドは設けずに setter の中で検証するカタチになっちゃいました f(^^;
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -