2012-10-06 32 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

很高兴我能帮助:) –