Mock eine Methode für eine Klasse statt der ganzen Klasse mit Moq?

9

Ich habe eine Klasse

%Vor%

Ich möchte die MethodeB testen, aber ich habe Probleme, darüber nachzudenken, wie ich MethodA mocken kann, während ich mit Moq immer noch in MethodB aufrufe. Moq verspottet die Schnittstelle, nicht die Klasse, also kann ich nicht einfach mock.Object.MethodB() aufrufen, richtig?

Ist das möglich? Wenn ja, wie?

    
Kyle Trauberman 28.07.2012, 00:11
quelle

2 Antworten

4

Ich glaube nicht, dass es möglich ist. Selbst wenn es möglich ist, würde ich es lieber nicht machen.

Sie testen das Verhalten von MyClass , die Tatsache, dass es passiert, dass IMyInterface implementiert wird. ist mit dem Testverhalten von MethodA und MethodB nicht verwandt. Sie können über einen separaten Test verfügen, der sicherstellt, dass die Klasse Schnittstellen implementiert, von denen Sie erwarten, dass sie sie bei Bedarf implementieren. Das Testen von MyClass.MethodB sollte auf Instanz von MyClass, nicht auf halb-mocked Objekt durchgeführt werden.

Wenn Sie denken, dass das Verhalten von Methode A eine Abhängigkeit ist, können Sie versuchen, es explizit aus der Klasse zu extrahieren. Es wird erlauben, sowohl MethodA (die einfach an die Abhängigkeit delegieren) und MethodB (die die Abhängigkeit verwenden und mehr tun) zu testen.

    
Alexei Levenkov 28.07.2012, 00:45
quelle
1

Mock-Abhängigkeiten können Sie nicht einfach (oder alle) instanziieren.
MyClass ist die Klasse unter Test, also sollte nicht gemunkelt werden (Sie wollen keine mocked Werte testen).
Aber wenn Sie eine MyClass.Foo -Eigenschaft haben, die die Klasse Foo ist, die IFoo interface implementiert und MethodA diese Foo -Eigenschaft verwendet, dann können Sie sich darüber lustig machen, um Abhängigkeiten zu brechen.

    
Adronius 30.07.2012 16:07
quelle

Tags und Links