2009-12-18 89 views
3

比方说,我有这个类:如何用Moq存根抽象集合?

public abstract class CustomerCollectionBase : Collection<Customer>{} 

我的一个班的测试下接受CustomerCollectionBase实例(这将是一些子类)。在被测试的方法中,这个集合通过for循环枚举并且结果被检查和处理。 喜欢如下:

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

是否有可能存根这个集合与起订量,所以我可以通过存根作为一个依赖于我的课被测的构造?

谢谢。

回答

3

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

只要传递具体的集合就会容易得多,除非你绝对需要对集合本身执行一些基于交互的测试。

但是,如果你必须这样做以起订量,你首先需要将以下using指令添加到您的测试代码:

using Moq.Protected; 

您现在可以使用受保护的()方法来设置模拟到使用适当的受保护的CustomerCollectionBase虚方法。

有关如何使用Moq模拟受保护成员的更多信息,请参阅this blog post