Frage

wurde mir gesagt, das Guice ist Ziel prüfbaren Code zu produzieren, und nicht in dem Unit-Test benötigt. Aber wie kann ich testen, einen Singleton (@Singleton) ohne Verwendung Guice?

War es hilfreich?

Lösung

Sie können Notwendigkeit Guice (oder ein DI-Framework) in Unit-Tests sind der SUT normalerweise klein genug, dass manuell DI ist in Ordnung und gut.

Nun, wie auf „einen Singleton zu testen“. Auf die gleiche Weise Sie eine andere Klasse testen, ist, dass ein Teil der Schönheit von Singleton-as-a-scope. In Ihrem Testmethode eine neue Instanz des „singleton“ erstellen, testen und es dann wegwerfen. Denken Sie daran, Sie nicht das SUT von früheren Tests betroffen sein wollen, und Sie wollen in der Lage sein, verschiedene Abhängigkeiten für jeden Test zu setzen, so dass Sie den Umfang und nicht das Design-Muster eine gute Sache ist, verwenden. Sie brauchen nicht zu tun, etwas Besonderes, es zu testen.

Andere Tipps

Eigentlich ist meine persönliche Sicht, dass jeder Test, der DI Rahmen benötigt, kann mit Argwohn betrachtet werden - es klingt eher wie ein Integrationstest, nicht Unit-Test. Unit-Tests sind Stand-alone, und Sie sollten manuell und explizit alle Abhängigkeiten verkabeln, einschließlich Mock Versionen von Dingen, die Sie nicht wollen, zu testen. Ich weiß, dass von den Entwicklern geschrieben in den Mainstream-Entwickler Kauderwelsch Begriff „Unit-Test“ jede Prüfung bedeuten verdünnt werden kann. Dies bedeutet nicht, es richtige Verwendung des Begriffs jedoch ist.

In diesem Licht nicht, sollten Sie müssen (und wahrscheinlich sollte einfach nicht!) Verlassen sich auf Guice oder Feder DI.

Große Sache über Guice (et al) ist eigentlich diese: indem man sich für die vollständigen Systeme verwenden, können Sie Tests machen ohne DI viel einfacher

.

Also ich denke, die höchsten bewerten Antwort ist richtig: ein Singleton zu testen, einfach erstellen und testen. Es gibt keine spezifische Magie es.

Guice tut Dependency Injection, und Sie müssen es in den Tests auch, denke ich.
Guice macht es einfache Implementierung für injizierte Klassen Mock-Objekte zu ändern (Stubs, nicht reale Objekte). So Ihre Tests können in Stub-Umgebung laufen und schneller getestet werden und unabhängig von anderen Schichten Ihrer Anwendung.

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