Unit-test zu überprüfen, ob eine Basis-Methode der Klasse aufgerufen wird

Ich habe eine base-Klasse:

public abstract class MyBaseClass
{
    protected virtual void Method1()
    {    
    }
} 

und eine abgeleitete Klasse:

public class MyDerivedClass : MyBaseClass
{
    public void Method2()
    {
        base.Method1();
    }
}

Ich möchte schreiben Sie einen unit-test für Method2 um zu überprüfen, dass es Anrufe Method1 auf die Basisklasse. Ich bin mit Moq wie mein mocking-library. Ist das möglich?

Stieß ich auf einen Zusammenhang, SO link:

Mocking eine Basisklasse Aufruf der Methode mit Moq

in der die 2. Antwort es vermuten lässt, kann erreicht werden durch Einstellung CallBase - Eigenschaft auf true fest auf dem mock-Objekt. Aber es ist nicht klar, wie diese würde es ermöglichen, den Aufruf der Basisklassenmethode (Method1 im obigen Beispiel), überprüft werden.

Schätzen jede Hilfe bei diesem.

  • Warum ist es eine Voraussetzung, dass die Basis-Methode aufgerufen wird? Wenn Sie verspotten es, alle, die Sie überprüfen möchten, dass der mock ruft die base-Methode. Sie sind nur zu überprüfen, dass die base. syntax funktioniert oder brauchen Sie vererbten Klassen zu nennen, die Basis?
  • Auch, Sie sollte nur die Prüfung, dass die Ergebnisse korrekt sind. Die Prüfung, dass eine bestimmte Implementierung verwendet wird, ist im Allgemeinen ein Hinweis auf ein schlechtes design.
  • Hat die Basis-Methode Nebenwirkungen haben, dass man überprüfen kann?
  • Ja, es gibt Nebenwirkungen, die verifiziert werden kann und ich denke, das ist wohl die route, die ich nehmen werde. Ich wurde gerade gefragt, ob es tatsächlich möglich ist mit mocking-Bibliotheken wie Moq, um zu überprüfen, dass eine Basis-Methode der Klasse aufgerufen, die eine abgeleitete Klasse.
  • Möglicherweise, aber es macht viel mehr Sinn, um zu überprüfen, die Ergebnisse eher als die Umsetzung. Plus es gibt Ihnen die bis zu ändern Sie die Implementierung, ohne neu zu schreiben Ihre tests (solange die Ergebnisse korrekt sind).
  • In Ihrer aktuellen Umsetzung, kann man nicht abfangen, wird der Anruf mit Moq, aber da MyDerivedClass nicht umsetzen Method1, Sie könnten entfernen Sie die base. Präfix aus dem Anruf-und dann würden Sie in der Lage sein, um den Aufruf abzufangen. Dies ist wahrscheinlich die richtige Sache zu tun sowieso, da sonst Sie schneiden abgeleitete Implementierungen von Method1 aus, das fühlt sich falsch an. Weiter Lesen: stackoverflow.com/a/31201708/592182 und stackoverflow.com/a/31062287/592182
  • Möglich, Duplikat der Original-Methode immer wieder aufgerufen Moq sogar nach CallBase = true/false

InformationsquelleAutor aw1975 | 2016-04-19
Schreibe einen Kommentar