2012-02-07 12 views
6

ここにシナリオがありますが、私はスパゲティコードをリファクタリングしています。私の最初の問題は、他のクラスを新しくした一連のクラスで、テストしたいクラス(Search.cs)の依存関係を必要とするクラスにすることでこれを修正しました。別のクラスから継承したクラスを模擬してください

public Search(XmlAccess xmlFile, SearchDatabaseConnect searchDatabaseConnection) 
    { 
     this.xmlFile = xmlFile; 
     FsdcConnection = searchDatabaseConnection; 
     Clear(); 
    } 

私はさらにそれをチェーンアップしています。それはすべて良いですが、私は少し問題があります。

他のクラスから継承しているクラスは、私はResharperを持っていますが、インタフェースを抽出しましたが、問題は依存クラスが別の具象クラスを継承していることです。

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // } 

私はDatabaseConnectの継承についてどうすればよいでしょうか?どのように私はそれを嘲笑するのですか?明らかにそれがなければ、私はすべてISearchDatabaseConnectを模擬することができ、離れて行くことになるでしょうが、具体的なクラスの継承にはまっています。私のgoogl'ingが失敗である前に、これについての例を見つけることになったとき、私は人々がこれにぶつかると確信しています。

ありがとうございました。

+1

参考までに "newing it up"は一般的にインスタンス化と呼ばれています;-) –

+0

ありがとう - それは単に個人的な好みの問題です、私は "newing"という用語を好む傾向があります。 OK n ew)とb)何らかの理由でよりインスタント化という用語が楽しいようです。 – Kenn

答えて

3

DatabaseConnectもそこから抽出されたインターフェースを持っていますか?

public interface IDatabaseConnect 

public class DatabaseConnect : IDatabaseConnect 

public interface ISearchDatabaseConnect : IDatabaseConnect 

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 

をそして今、両方のインターフェイスからすべての「もの」を取得しますMock<ISearchDatabaseConnect>を作る:私はあなたのようにそれを設定することができるはずだと思います。


サイドノートでは、あなたのメソッド/コンストラクタは、おそらくインターフェイスであっ取るべきではなく、具体的な:

public Search(XmlAccess xmlFile, ISearchDatabaseConnect searchDatabaseConnection) { ... } 

あなたのような、モックを注入することができますこの方法:

var mockedSearchDatabaseConnect = new Mock<ISearchDatabaseConnect>(); 
var search = new Search(xmlFile, mockedSearchDatabaseConnect.Object); 
+0

ああ...そうだね! – Kenn

+0

はい、そうです!私はあなたが何を意味するかを見ます。 – Kenn

関連する問題