Moq Wie testen Sie interne Methoden?

7

Von meinem Chef gesagt, Moq zu benutzen und das ist es. Ich mag es, aber es scheint, dass im Gegensatz zu MSTest oder Mbunit etc ... Sie interne Methoden nicht testen können

Also muss ich eine interne Implementierung in meiner Oberfläche veröffentlichen, damit ich sie testen kann.

Vermisse ich etwas?

Können Sie interne Methoden mit Moq testen?

Vielen Dank

    
Christoffer Hammarström 22.09.2009, 05:43
quelle

6 Antworten

11

Sie können das Attribut InternalsVisibleTo verwenden, um die Methoden sichtbar zu machen zu Moq.

Ссылка

    
Robert Harvey 22.09.2009, 05:48
quelle
5

Es ist nichts falsch daran, die Interna für andere Klassen zum Testen sichtbar zu machen. Wenn Sie die Interna einer Klasse testen müssen, tun Sie dies auf jeden Fall. Nur weil die Methoden nicht öffentlich sind, heißt das nicht, dass Sie sie ignorieren und nur die öffentlichen testen sollten. Eine gut gestaltete Anwendung wird tatsächlich einen Großteil des Codes in Ihren Klassen so eingekapselt haben, dass sie nicht öffentlich sind. Das Ignorieren der nicht-öffentlichen Methoden in Ihren Tests ist also ein großer Fehler IMHO. Eine der Schönheiten der Komponententests ist, dass Sie alle Teile Ihres Codes testen, egal wie klein und wenn Ihre Tests zu 100% ausgeführt werden, ist es eine sehr vernünftige Annahme, dass, wenn all diese Teile zusammengefügt werden Anwendung wird für den Endbenutzer ordnungsgemäß funktionieren. Natürlich ist der letzte Teil der Frage, wo Tests zur Integrationsebene eintreffen - was eine andere Diskussion ist. Also probier es aus !!!

    
jle 30.12.2009 12:46
quelle
3

Wenn Sie viel Code haben, der nicht mit den öffentlichen Methoden getestet wird, haben Sie wahrscheinlich Code, der in eine andere Klasse verschoben werden sollte.

Wie in einer anderen Antwort erwähnt, können Sie das Attribut InternalsVisibleTo dafür verwenden. Aber das bedeutet nicht, dass Sie es tun sollten.

    
eglasius 22.09.2009 05:51
quelle
2

Aus meiner Sicht sollte Mocking verwendet werden, um etwas Verhalten nachzuahmen, von dem wir abhängig sind, aber nicht zum Testen aufbrechen. Daher:

F: Fehle ich etwas? - Nein, Sie verpassen nichts, MOQ fehlt die Fähigkeit, private Verhaltensweisen zu verspotten.

F: Können Sie interne Methoden mit Moq testen? - Wenn das Ergebnis des privaten Verhaltens öffentlich sichtbar ist, dann können Sie ja die interne Methode testen, aber nicht wegen Moq, die Sie testen können. Ich möchte hier darauf hinweisen, dass Mock nicht die Fähigkeit zum Testen ist, sondern eher die Fähigkeit zu ähnlichen Verhaltensweisen, die wir nicht testen, sondern davon abhängen.

C: Ein Hauptvorteil von TDD ist, dass Ihr Code leicht geändert werden kann. Wenn Sie beginnen, Interna zu testen, wird der Code starr und schwer zu ändern - Ich stimme diesem Kommentar aus zwei Hauptgründen nicht zu:     1: Es ist kein anfängliches Missverständnis, denn bei TDD geht es nicht nur um die Fähigkeit, schneller zu programmieren, sondern auch um Code von besserer Qualität. Je mehr Test wir machen können, desto besser.     2: Es macht den Code nicht schwieriger zu ändern, wenn Sie die internen Methoden irgendwie testen können.

    
user1840652 21.11.2012 02:40
quelle
1

Ihre anfängliche Annahme, dass es notwendig ist, die interne Methode zu testen, ist ein gängiges Anfänger-Missverständnis über Komponententests.

Zugegeben, es gibt Fälle, in denen private Methoden isoliert getestet werden sollten, aber der 99% -ige häufige Fall ist, dass die privaten Methoden implizit getestet werden, weil sie die öffentlichen Methoden ihre Tests bestehen lassen. Die öffentlichen Methoden rufen die privaten Methoden auf.

Private Methoden gibt es aus einem bestimmten Grund. Wenn sie nicht zu externem testbarem Verhalten führen, brauchen Sie sie nicht.

Scheitern Ihre öffentlichen Tests, wenn Sie sie einfach löschen? Wenn ja, werden sie bereits getestet. Wenn nicht, warum brauchen Sie sie dann? Finden Sie heraus, wofür Sie sie brauchen und drücken Sie das dann in einem Test gegen die öffentliche Schnittstelle aus.

Ein Hauptvorteil von TDD ist, dass sich Ihr Code leicht ändern lässt. Wenn Sie beginnen, Interna zu testen, wird der Code starr und schwer zu ändern.

    
Tormod 14.11.2009 14:03
quelle
1

InternalsVisibleTo ist Ihr Freund zum Testen von Interna. Denken Sie daran, Ihre Versammlungen zu unterzeichnen, und Sie sind sicher.

    
kzu 27.04.2010 13:47
quelle

Tags und Links