2012-10-06 13 views
6

मेरे पास एक अमूर्त वर्ग है जिसके निर्माता को संग्रह तर्क की आवश्यकता है। मैं अपनी कक्षा का परीक्षण करने के लिए कैसे नकल कर सकता हूं?अमूर्त वर्ग का मजाक जिसमें रचनाकार निर्भरताएं हैं (मोक के साथ)

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) { } 
} 

मैं Moq के साथ इस लक्ष्य को हासिल कर सकते हैं ?

उत्तर

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

खुशी है कि मैं मदद कर सकता है :) –

संबंधित मुद्दे