Moq une classe de base de la fonction à partir d'une classe dérivée

Je suis nouveau sur le Moq et je viens de regarder le pluralsight vidéo sur Moqing donc j'ai senti que la capacité d'agir et d'écrire des tests. J'ai une Classe de Base, disons Feuille qui implémente une interface ISheet. La feuille est la classe de base pour les pages:

abstract class Sheet: ISheet
{
    public virtual void CreateSheet()  //Defined in ISheet
    {
    }
    public virtual void BuildSheet() //Defined in ISheet
    {
    }
    //and some abstract methods, etc.
}

public class Page : Sheet
{
    public override void CreateSheet()
    {
        BuildSheet(); //Base class implementation
    }
}

J'ai remplacé une des méthodes de la classe de base qui est CreateSheet(), mais je veux tester que le BuildSheet() méthode dans la classe de base est appelé à partir de ma classe dérivée:

Donc, dans ma Classe de Test, je Moq le SUT au lieu de l'interface

var MockSheet = new Moq<Page>();

appel de la méthode:

var actual = MockSheet.Object.CreateSheet(); 

Puis vérifier

MockSheet.Verify(x => x.BuildSheet(), Times.AtLeastOnce);

Au lieu-je obtenir MockException “Attendu Invocation au cours de l'exercice au moins une fois mais n'a jamais été effectuée. Le CreateSheet méthode n'est jamais appelé. Si je change il CreateSheet méthode:

public void CreateDocSheet() //removed override
{
    BuildSheet() //base classses implementation
}

Et dans l'appel test:

var actual = MockSheet.Object.CreateDocSheet();  

Il fonctionne. Je ne comprends pas pourquoi. Je crois que fonctionnellement que c'est un moyen valable de codage, j'ai de la feuille, qui dispose de 2 pages, j'ai une Interface qui définit toutes les fonctions et les propriétés qui doivent être mis en œuvre, je mise en œuvre de ces fonctions dans la classe de base, mais pas toutes les méthodes ont besoin d'être mises en œuvre dans les classes dérivées, donc, un peu de méthode, sont remplacées et une certaine utilisation de la classe de base de la mise en œuvre. Veuillez expliquer pourquoi c'est un problème pour utiliser la version de remplacement de la fonction?

OriginalL'auteur user3666407 | 2015-01-29