Sie können jede Schnittstelle und alle abstrakten oder virtuellen Mitglieder verspotten. Das ist es im Grunde.
Dies bedeutet, dass Folgendes absolut möglich ist:
%Vor%Wenn die von SomeAbstractClass geerbten Member nicht versiegelt sind, können Sie auch MyClass maskieren:
%Vor%Ob dies sinnvoll ist oder nicht, hängt von der Implementierung von MyClass ab. Nehmen wir an, dass SomeAbstractClass wie folgt definiert ist:
%Vor%Wenn die GetStuff-Methode in MyClass wie folgt implementiert ist, können Sie sie dennoch überschreiben:
%Vor%Damit können Sie schreiben:
%Vor%Da GetStuff, sofern nicht explizit versiegelt, immer noch virtuell ist. Hätten Sie GetStuff jedoch so geschrieben:
%Vor% Sie könnten es nicht verspotten. In diesem Fall erhalten Sie eine Ausnahme von Moq, die besagt, dass es sich um eine ungültige Überschreibung eines nicht virtuellen Mitglieds handelt (da es jetzt sealed
ist).
Deine Frage macht keinen Sinn. Moq kann verwendet werden, um abstrakte Klassen und Interfaces nachzuahmen. Da MyClass
auch keins ist, kannst du kein Mock erstellen.
Ich denke jedoch nicht, dass dies ein Problem ist, da die Verbraucher Ihrer MyClass-Instanz wahrscheinlich eine SomeAbstractClass
- oder eine IMyClass
-Instanz und nicht eine MyClass
-Instanz erwarten. Wenn sie tatsächlich eine MyClass
-Instanz erwarten, dann müssen Sie eine Abstraktion darüber machen. Dies kann erreicht werden, indem entweder SomeAbstractClass
die Schnittstelle IMyClass
implementiert oder indem die Schnittstelle IMyClass
die Methoden und Eigenschaften von SomeAbstractClass
verfügbar macht.
Tags und Links c# unit-testing moq