Frage

Ich schreibe einen spock Unit-Test, der eine Controller-Methode testet.

Die Controller-Aktion im Test instanziiert ein neues Domain-Instanz-Objekt und Anrufe zu validieren auf sie, bevor sie gespeichert werden. Gibt es trotzdem von dem Anruf zu domainInstance.validate spöttischen (), damit ich kann es machen zurückgeben, was ich will? Oder muss ich diese verstecken Instanciation und hinter einer Service-Methode Speichern dies zu erreichen?

Ich mache das so, weil im Rahmen eines Unit-Tests für ein Controller, die Zwänge eines Domain-Objekt sollte nicht beteiligt. Ich teste die an andere Stelle (in den MyDomainClassTests, natürlich). Wenn ich diejenigen in Rechnung meinen Test nehmen, wäre eine Integration wollte Test.

War es hilfreich?

Lösung 2

Nach einer Weile ich zu dem Schluss gekommen, dass das, was ich wollte ist eher schwierig. Wenn Sie in einem Szenario sind, wo Sie nicht Haben verwenden mockDomain(), könnten Sie eine groovy metaclass Methode hinzufügen und die Implementierung (true oder false zurück, je nachdem, was Sie wollen)

Wenn Sie tun Notwendigkeit mockDomain (), weil Sie Mock bereits bestehenden Instanzen benötigen, sind Sie von Optionen, zumindest für jetzt, weil mockDomain () und das Hantieren mit metaclass Methoden dass mockDomain tatsächlich Wille liefert mischen nicht.

Andere Tipps

Wenn Sie die Validate auf der Domäne-Instanz platziert haben selbst, sondern in einem Service, Sie könnten Ihre Controller nehmen Sie einen Dienst in seinem Konstruktor (oder vielmehr eine Schnittstelle eines Dienstes) lassen. Lassen Sie, dass Service-Griff, um die Validierung.

Jetzt für Ihren Unittest des Controllers, die Sie in einem Mock dieser Schnittstelle (Service) an die Steuerung und Konfiguration der Mock Rückkehr passieren würden, was auch immer Sie wollen.

Für .net ich kann Moq empfehlen ( http://code.google.com/p/moq / )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top