Hi,
I'm writing a unit test that tries to extract and test data accumulated in
a singleton DAO service after calling a servlet. I don't use Guice Web and
so I inject the servlet manually. And in order to get the handle of the
singleton DAO, I also inject it to the unit test itself. Here's how the
setup looks like
interface DAO { ... }
>
> @Singleton
> class RealDAO implements DAO { ... }
> @Singleton
> class DummyDAO implements DAO { ... }
>
> class MyRealModule extends AbstractModule {
> configure() {
> bind(DAO.class).to(RealDAO.class);
> }
> }
>
> class MyServlet {
> @Inject private DAO theDAO;
> public void init(ServletConfig config) throws ServletException {
> super.init(config);
> Injector injector = (Injector)
> config.getServletContext().getAttribute(Injector.class.getName());
> injector.injectMembers(this);
> }
> ...
> }
>
> class TestServlet { // TestNG
> Injector injector;
> @Inject DAO tesDAO; // I don't have to make the servlet's dao public.
> MyServlet servlet;
> @BeforeMethod
> void setup() {
> injector = Guice.createInjector(Modules.override(new
> TestSettingModule()).with(new AbstractModule() {
> configure() {
> bind(DAO.class).to(DummyDAO.class).in(Singleton.class);
> }
> }));
> // set up a ServletConfig with the injector as servlet context
> attribute
> servlet = new MyServlet();
> servlet.init(config); // with the injector
> injector.injectMember(this); // inject to the test class itself
> }
> void testServlet() {
> servlet.doPOST();
> assertEqual(testDAO.getSomeValue(), expectedValue); // failed here!!!
> }
> }
>
> The testServlet failed because injector creates two different instances of
DummyDAO and so the servlet is talking to one and the test is examing its
own.
Why would injector create two instances for object annotated with Singleton
scope? What's wrong in my setup.
Thanks!
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.