Können Sie sich über ein Objekt lustig machen, das eine Schnittstelle UND eine abstrakte Klasse implementiert?

8

Ist es möglich, Moq zu verwenden, um ein Objekt nachzuahmen, das eine Schnittstelle und eine abstrakte Klasse implementiert?

I.e .:

%Vor%

Können Sie sich darüber lustig machen?

    
mrblah 28.12.2009, 13:36
quelle

2 Antworten

5

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).

    
Mark Seemann 29.12.2009, 07:52
quelle
0

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.

    
Klaus Byskov Pedersen 28.12.2009 13:50
quelle

Tags und Links