2016-04-17 5 views
0

Ich benutze Guice 4 und ich habe eine Klasse, die ich auf der Ebene der http-Sitzung sein möchte, also habe ich es mit @SessionScoped eingerichtet. Das Problem ist, wenn ich Unit-Test diese Klasse bekomme ich die folgende Ausnahme. Ich weiß nicht, wie ich das in meinem Test nachmachen soll.Unit-Test SessionScoped Klasse

com.google.inject.CreationException: Unable to create injector, see the following errors: 

1) No scope is bound to com.google.inject.servlet.SessionScoped. 
    at org.abc.collab.repo.SessionedUOW.class(SessionedUOW.java:12) 
    at org.abc.business.BusinessModule.configure(BusinessModule.java:18) 
+0

Veröffentlichen Sie Ihr Testbeispiel, das Minimum erforderlich, einschließlich Ihrer Guice Testmodul. – sargue

Antwort

2

Es sieht aus wie Sie Guice verwenden nur zum Teil: Sie haben Ihre Klasse angeschlossen, aber nicht den Umfang verbindlich (Aufruf zum bindScope), die es braucht.

Im Allgemeinen sollten Sie keinen echten Guice-Injektor in einem Komponententest verwenden; Stattdessen instanziieren Sie Ihre Klasse mit ihrem Konstruktor und stellen Sie ihre Abhängigkeiten selbst zur Verfügung (mit Hilfe von Fälschungen oder Mocks nach Bedarf).

Wenn Sie Guice zu verwenden brauchen, seien Sie gewarnt, dass dies nicht mehr ein Unit-Test ist und jetzt viel mehr wie ein Systemtest oder Integrationstest ist. An diesem Punkt müssen Sie diagnostizieren, welchen Anruf Sie an bindScope benötigen, und in Betracht ziehen, ihn in einen Testhelfer zu extrahieren, um den Rest Ihres Tests zu vereinfachen.