|
> 上記のテストをDebugger実行すると、new AppConfig();の所で、イミディエイトに下記のようなエラーが出力され、AppConfigクラスをnew出来ません。
Debugger でステップ実行したとき? NUnit ランナーからテストを実行したときは、 問題無いのですか?
> public AppConfig() > { > this.readConfig(); > //フィールドに読込んだ値をチェックしています。 > this.validate(); > }
コンストラクタ内でファイル I/O やったりゴチャゴチャやるのは、 好みじゃないんだけど、 まぁそれは置いといて f(^^; # 個人的には、 クラス名から察するに、 シングルトンにして public static AppConfig GetConfig() てな感じのインスタンス取得メソッドを用意するところ。
必ずファイル I/O の部分は独立させて、 先にテストしましょう。
メソッド readConfig() が提示されたもの ( field1 にしか書き込まない ) ならば、 public AppConfig() { this. field1 = AppConfig.ReadConfig(); …
public static string ReadConfig() { … ※ InternalVisibleTo 属性を使えば、 public じゃなくて internal でいいけど。
…みたいな感じで。
validate() メソッドも、 先にテストしておきたいところです。
public AppConfig() { this. field1 = AppConfig.ReadConfig(); AppConfig.Validate(this); …
public static void Validate(AppConfig cfg) { string f1= cfg.field1; if(f1 == null) throw new … …
それと。 AppConfig クラスをテストするコードを作っているんですよね?
> private AppConfig appConfig = null; > [SetUp] > public void setUp() > { > AppConfig appConfig = new AppConfig(); //←ココ、書き間違い? メンバ変数への代入だと解釈します。
テストメソッドに AppConfig appConfig = new AppConfig(); の 1行を毎回書くのがそんなにイヤですか?
SetUp / Teardown などには、 未テストのコードを入れないようにしましょう。 そして、 ちゃんとコンストラクタのテストメソッドを別に書きましょう。 [Test()] public void ConstructTest() { AppConfig appConfig = new AppConfig(); Assert.IsNotNull(appConfig); Assert.AreEqual("foo", appConfig.Bar); //コンストラクト時に確定するプロパティのテスト …
# エスパー回答的には、 field1 が null のまま、 validate() の中で使ってる気が f(^^;
…あw 書いてる間に、 自己解決なされたようで。
> Aにあるapp.configをBにコピーし、実行すればいけました。
あぁ、 やっぱり。 で、 validate() 中で null 参照していた、 と。 まぁ、 でも投稿しておこう。 f(^^;
|