假设我有这门课程:
public abstract class CustomerCollectionBase : Collection<Customer>{}
我正在测试的一个类接受CustomerCollectionBase实例(它将是一些子类)。在测试方法中,通过for循环枚举此集合,并检查和处理结果。 如下:
for (int i=0;i<_customers.Count; i++){
//process customer
}
是否可以使用Moq存储此集合,以便将存根作为依赖项传递给我的测试类的构造函数?
谢谢。
答案 0 :(得分:3)
从技术上讲,这是可能的,但很困难,因为Collection<T>
中唯一可覆盖的成员受到保护。
只是传递一个具体的集合会更容易,除非你绝对必须对集合本身执行一些基于交互的测试。
但是,如果您必须使用Moq执行此操作,则首先需要将以下using指令添加到测试代码中:
using Moq.Protected;
您现在可以使用Protected()方法使用CustomerCollectionBase的相应受保护虚拟方法设置模拟。
有关如何使用Moq模拟受保护成员的详细信息,请参阅this blog post。