Moq eine Basisklasse Funktion in einer abgeleiteten Klasse

Ich bin neu auf Moq und ich schaute zu, wie pluralsight video auf Moqing so fühlte ich mich ermächtigt, zu gehen und schreiben Sie ein paar tests. Ich habe eine Base-Klasse sagen wir mal-Blatt, das eine Schnittstelle implementiert ISheet. Blatt ist die Basisklasse für 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
    }
}

Ich überschrieb eine der Methoden von der Basisklasse, die CreateSheet(), aber ich möchte, um zu testen, ob die BuildSheet() Methode in der Basisklasse wird aufgerufen, aus meiner abgeleiteten Klasse:

So, in meiner Test-Klasse, ich Moq SUT anstelle der Schnittstelle

var MockSheet = new Moq<Page>();

rufen Sie die Methode:

var actual = MockSheet.Object.CreateSheet(); 

Dann überprüfen

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

Stattdessen bekomme ich MockException “Erwartet den Aufruf auf den mock-mindestens einmal, wurde aber nie durchgeführt. Die CreateSheet-Methode nie aufgerufen wird. Wenn ich Wechsel, den er CreateSheet Methode:

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

Und in der test-Aufruf:

var actual = MockSheet.Object.CreateDocSheet();  

Es funktioniert. Ich verstehe nicht, warum. Ich glaube, das funktional, das ist eine gültige Möglichkeit, die Codierung, ich habe Blatt hat 2 Seiten, ich habe eine Schnittstelle, die definiert alle Funktionen und Eigenschaften, die umgesetzt werden sollten, ich diese Funktionen implementieren, die in der Basisklasse, aber nicht alle Methoden implementiert, die in den abgeleiteten Klassen so, irgendeine Methode, die überschrieben werden und einige nutzen die Implementierung der Basisklasse. Bitte erklären Sie, warum es ein Problem mit der überschriebenen version der Funktion?

InformationsquelleAutor user3666407 | 2015-01-29

Schreibe einen Kommentar