gpt4 book ai didi

c# - 模拟具有构造函数依赖性的抽象类(使用 Moq)

转载 作者:太空狗 更新时间:2023-10-29 17:39:24 25 4
gpt4 key购买 nike

我有一个抽象类,其构造函数需要集合参数。我如何模拟我的类(class)来测试它?

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

关于c# - 模拟具有构造函数依赖性的抽象类(使用 Moq),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com