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?
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.
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.
Tags und Links .net c# unit-testing moq