2011-01-24 9 views
1

コードにいくつかの変更を加えましたが、新しいコードと互換性があることを確認するために、いくつかの単体テストを再調整する必要があります。私は問題に立ち向かいました。この中で:Rhinoモックを使用してテストオブジェクト内の1つの値だけをモックする方法はありますか?

  ChannelLoad loader = new ChannelLoad(_customerDbMock, _bulkCopyMock); 
      loader.Execute(taskId); 

「ローダー」オブジェクトは現在の文字列が自動的に返された前のに対し、文字列の値を取得するために、別のオブジェクトに接続しようとしています。だから明らかな解決策は、そのオブジェクトを模擬してテストに適した値を返すことです。しかし、いろいろな理由から私は簡単にこれを行うことはできません。

理想的には、 "実際の" Executeメソッドを実行する "実際の"(つまりコードで指定された)ローダーオブジェクトを取得することですが、その特定の文字列。しかし、Rhino Mockを使って、たとえ可能であっても、これをどうやって行うのか本当に分かりません。問題の文字列プロパティは抽象的なものではなく、何も保護されておらず、実際には読み取り専用です。これは、「ローダー」内の外観を示しています。

protected string DbConnectionString 
    { 
     get 
     { 
      return _Service.GetLocalDatabase().GetConnectionString(_Service); 
     } 
    } 

問題は、テスト環境「GetLocalDatabase」は何も返しません。

誰でもお手伝いしますか? Rhino Mockを使用してこれをモックする方法はありますか?それとも、外部オブジェクトに依存しないようにコードをリファクタリングする唯一の方法ですか?後者の場合は、ポインタも役立ちます。私はそのローダが_Serviceへの依存性を持つ参照

乾杯、 マット

答えて

3

他の二つのオプションあなたは_Serviceを注入しない場合:

がChannelLoadから継承するクラスを作成します(「TestableChannelLoader」か何かそれを呼び出す)と

  1. はDbConnectionString-プロパティを上書きまたは

  2. あなたの新しいクラスでオーバーライドしてDbConnectionString-プロパティ

  3. でそれを呼び出すことができる方法「GetConnectionString」を抽出
2

。したがって、DbConnectionStringプロパティの動作を変更するには、この依存関係のモックをローダーに挿入する必要があります。

+0

私は大規模なリファクタリングなしではそれを行うことができません - それは本当に唯一のオプションですか? –

+0

レガシーコードにテストを書いていますか?そして、あなたは、ローダーやその他のオブジェクトをテストしていますか? –

+0

はい、私はローダーをテストしています。コードベースに変更を加えました。単体テストを行い、必要なものをテストしていることを確認し、合格するように変更します。この特定のものは、テスト環境では存在しない外部オブジェクトを呼び出しているため、エラーが発生しています。 –

関連する問題