2009-05-07 10 views
1

NunitをASP.Netで動作させようとしています。ユニット/統合HttpCurrentContextを使用するテストコード

問題は、グローバルコントロールを参照するカスタムコントロールをテストしていることです。

私は「App_GlobalResourcesをロードできません」を取得しますユニットテストそれ

/// </summary> 
     [Test] 
     public void TestSetAndGetNumber() 
     { 
      PhoneNumber phone = new PhoneNumber(PhoneNumber.NumberType.Business, "", true, ""); 
      string expectedString = "1-800-Goat-Phone"; 
      string resultString = "1-800-Goat-Phone"; 
      resultString = phone.Value = resultString; 
      Assert.AreEqual(expectedString, resultString, "GetNumberMatch method returned unexpected result."); 
      Assert.Fail("Create or modify test(s)."); 
     } 

にしてみてください。

私はHttpContextをシミュレートしようとしなければならないかもしれないかどうか試してみてください。Using You've been Haacked blog postこれは誰もが確認できませんでした。

答えて

1

これは、テスト可能にするために正しい方法でクラスを設定するのが典型的なシナリオです。外部依存関係(グローバルリソースへの参照)がある場合は、それを抽象的なにして、それを模擬することができます。

このbookをご覧になることをお勧めします。クラスのデザイン方法をより詳しく説明します。代わりに、moqから例をダウンロードできます。単位テストの設定は、あなたのクラスをより緩やかに結合された方法で設計することについてたくさんあるので、DB /ファイルシステム/他のリソースとのやりとりなしに効果的にテストできます。

+0

テストされたクラスはカスタムコントロールPhoneNumberです。すべての電話番号のインスタンスは現在、ラベルテキストなどを取得するためにGlobalResourcesにヒットする必要があります.GlobalResourceを使わずにその部分をテストできるように、クラスの変更をどのように推薦するかはわかりません。 PhoneNumberがGlobalResourcesにアクセスするためのインタフェースを使用していた場合、単体テストでそのインタフェースをきれいに変更して模擬データを返す方法はありません。 –

+0

テストの目的は何ですか? GlobalResourceの文字列コンテンツをテストしますか?私はちょうどあなたが正確にテストしたいものと少し混乱していますか? –

+0

getter-setterのいくつかのロジック。私は、ゲッターセッターにロジックを持たないことになる人もいるかもしれませんが、getter/setterタイプのロジック(表示ロジック)です。私は、デザインパターンの観点からはほとんど価値を提供しないインターフェースを持つという大きなファンではありません。 本当に単体テストでhttpcontextをシミュレートしたいと思うかもしれませんが、多分私は星を望んでいます。 –

1

これはglibと聞こえるかもしれませんが、PhoneNumberクラスを再テストしてテスト可能にすることはできませんか?

単体テストを使用する場合は、この方法が適しているようです。 PhoneNumberクラスを変更できない場合、それをテストする際のポイントは何ですか?

関連する問題