C# WebApi Unit-Tests und Mocking-Controller
Arbeite ich auf dieser WebAPI-Projekt, und ich brauche zum erstellen von unit-tests für Sie. Die Basis für das Projekt wurde mit VS 2010 , und dann ein WebApi-Modul wurde Hinzugefügt.
Die Funktionsweise der controller sind irgendwie immer in den Weg der Prüfung/spöttisch. Ich bin mit xUnit und Moq , aber es gibt absolut keine Notwendigkeit zu halten mit diesen beiden.
Verwendet die Anwendung bestimmter Objekte zum Umgang mit Datenbank-Zugriff, so dass ich die
controllerObject und seine contructor erfordert das DataAccessObject
Ich habe ein problem mit Spott controller /dataaccess-pair-Mädchen. Der erste test im Versuch zu laufen, ist eine GetAllFromDataBase, aber ich nicht wirklich eine Ahnung, wie es zu tun.
EDIT:
Tat ich, was Cuong Le sagte mir, und das ganze bewegt sich jetzt, ich wirklich apreciate es. Aber ich ging in ein anderes problem. Zugriff auf die API, es gibt eine Benutzername/Passwort-paar und mein controller verwendet-Thread.CurrentPrincipal.Identität.Name; jetzt würde ich brauchen, um diesen Wert für Sie, um vollständig funktionieren denke ich mal.
Auch die valueServiceMock.Setup(service => service.GetValues())
.Returns(new[] { "value1", "value2" });
scheint nicht zu funktionieren. der code versucht, für die Datenbank und bekommt nichts, da es keinen gültigen Benutzernamen zu suchen
- Sollten Sie nicht verspotten die controller, würden Sie verspotten die Leistungen, die der controller benötigt. Wenn u waren machten Sie sich über die controller, würden Sie nicht testen die controller. Das ist springende Punkt. Haben Sie einen Blick auf diese post: peterprovost.org//blog/2012/06/16/...
- Haben Sie überprüft, dass Sie pass mock-Objekt per Konstruktor wie diesen: var controller = new ValuesController(valueServiceMock.Objekt);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um Ihre app getestet, Sie brauchen, um design für Testbarkeit im Hinterkopf.Technisch, design für Testbarkeit, Ihre app sollte sein, lose Kopplung, so viel wie möglich, zwischen den Ebenen, zwischen den Komponenten und auch zwischen den Klassen.
Viele Tipps zu design für Testbarkeit: vermeiden, sealed, static, class... Aber die beliebteste Sache, die Sie müssen sich bewusst sein, ist dependency-injection-Muster, anstatt Objekt in contructors oder Methoden von anderen Objekten, die dieses Objekt eingefügt werden soll. Mit diesem Weg machen wir lockere Abhängigkeit zwischen Klasse und einfach für uns zu fake von mocking-framework. Esp, für die Objekte, die verlassen sich auf externe Ressourcen: Netzwerk -, Datei-oder Datenbank.
Wie zu injizieren Objekt mithilfe von dependency injection: das ist, warum IocContainer ist das richtige Werkzeug für diese, es wird einfügen von Objekten automatisch für Sie. IoC-Container, die ich bevorzuge ist: Autofac und NInject.
Beispiel hier zu injizieren ValueService in ValuesController:
Und unten ist die einfache code-unit-Tests mit Moq: