c# - 如何用最小起订量 stub 抽象集合?

标签 c# .net unit-testing mocking moq

假设我有这个类(class):

public abstract class CustomerCollectionBase : Collection<Customer>{}

我的一个被测类接受 CustomerCollectionBase 实例(它将是某个子类)。在被测方法中,此集合通过 for 循环枚举,并检查和处理结果。 如下所示:

for (int i=0;i<_customers.Count; i++){
 //process customer
}

是否可以使用 Moq stub 这个集合,以便我可以将 stub 作为依赖项传递给我的被测类的构造函数?

谢谢。

最佳答案

从技术上讲,这是可能的,但很困难,因为 Collection<T> 的唯一可覆盖成员受到保护。

除非您绝对必须对集合本身执行一些基于交互的测试,否则只传递一个具体的集合会容易得多。

但是,如果必须使用 Moq 执行此操作,则首先需要将以下 using 指令添加到测试代码中:

using Moq.Protected;

您现在可以使用 Protected() 方法通过 CustomerCollectionBase 的适当 protected 虚拟方法设置模拟。

参见 this blog post有关如何使用最小起订量模拟 protected 成员的更多信息。

关于c# - 如何用最小起订量 stub 抽象集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928099/

相关文章:

c# - 单元测试 EntityFrameworkCore IEntityTypeConfiguration<T>

c# - 在异步方法中使用 C# 从 EF 异步调用存储过程

c# - C# 属性的循环引用

unit-testing - 在运行完所有测试之后,是否可以执行拆解功能?

存储过程方法的 C# 单元测试

.net - 电影数据库使用 SQL 或 NoSQL .net

c# - 如何使函数像 IsWordPronounceable(SomeWord :String): boolean;

c# - 如何更改 WinRT ToggleSwitch 颜色?

c# - 学习用 C# 编写多线程应用程序的引用资料?

C# 公共(public)对象列表