2009-12-18 10 views
3

Disons que j'ai cette classe:Comment soulever une collection abstraite avec Moq?

public abstract class CustomerCollectionBase : Collection<Customer>{} 

Un de mes cours à l'essai accepte par exemple CustomerCollectionBase (il sera une sous-classe). Dans la méthode testée, cette collection est énumérée via la boucle for et les résultats sont examinés et traités. like suit:

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

Est-il possible de bouchonner cette collection avec Moq pour que je puisse passer stub comme une dépendance au constructeur de ma classe sous test?

Merci.

Répondre

3

Techniquement, cela serait possible, mais difficile, puisque les seuls membres remplaçables de Collection<T> sont protégés.

Il serait beaucoup plus facile de passer une collection de béton à la place, à moins que vous absolument devez effectuer des tests basés sur l'interaction de la collection elle-même.

Toutefois, si vous devez le faire avec Moq, vous devez d'abord ajouter la directive à l'aide suivante à votre code de test:

using Moq.Protected; 

Vous pouvez maintenant utiliser les méthodes protégées() pour configurer la maquette de avec les méthodes virtuelles protégées appropriées de CustomerCollectionBase.

Voir this blog post pour plus d'informations sur la façon de masquer les membres protégés avec Moq.

Questions connexes