2012-10-06 6 views
6

コンストラクタにコレクション引数が必要な抽象クラスがあります。どのように私はそれをテストするために私のクラスを模擬することができますか?コンストラクタに渡されたコレクションからコンストラクタの依存関係を持つ抽象クラスを模擬しています(Moqを使用)

public abstract class QuoteCollection<T> : IEnumerable<T> 
     where T : IDate 
    { 
     public QuoteCollection(IEnumerable<T> quotes) 
     { 
      //... 
     } 

     public DateTime From { get { ... } } 

     public DateTime To { get { ... } } 
    } 

各項目は、実装する必要があります。

public interface IDate 
{ 
    DateTime Date { get; } 
} 

私は私のカスタムは、それは次のようになりモック書きたい場合:

public class QuoteCollectionMock : QuoteCollection<SomeIDateType> 
{ 
    public QuoteCollectionMock(IEnumerable<SomeIDateType> quotes) : base(quotes) { } 
} 

私は部品番号でこれを達成することができます?

答えて

11

あなたはの線に沿って何かを行うことができます:

var myQuotes = GetYourQuotesIEnumerableFromSomewhere(); 
// the mock constructor gets the arguments for your classes' ctor 
var quoteCollectionMock = new Mock<QuoteCollection<YourIDate>>(MockBehavior.Loose, myQuotes); 

// .. setup quoteCollectionMock and assert as you please .. 

ここでは非常に単純な例です:魔法のように

public abstract class AbstractClass 
{ 
    protected AbstractClass(int i) 
    { 
     this.Prop = i; 
    } 
    public int Prop { get; set; } 
} 
// ... 
    [Fact] 
    public void Test() 
    { 
     var ac = new Mock<AbstractClass>(MockBehavior.Loose, 10); 
     Assert.Equal(ac.Object.Prop, 10); 
    } 
+0

ワークス:)私は助けることができる – Kuba

+0

うれしい:) –

関連する問題