[英]Moq: Mocking an interface of abstract base class of a controller
[英]Mocking abstract class that has constructor dependencies (with 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) { }
}
我可以用Moq做到这一点吗?
您可以按照以下方式进行操作:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.