我正在使用Guice 4,我有一个课程,我希望在http会话级别设置范围,所以我用 @SessionScoped 装饰它。问题是,当我对这个类进行单元测试时,我得到以下异常。我不知道如何在我的测试中模仿这一点。
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 :(得分:2)
看起来你只是部分地使用了Guice:你已经连接了你的类,但没有它需要的范围绑定(调用bindScope
)。
通常,您不应该在单元测试中使用真正的Guice注入器;相反,使用其构造函数实例化您的类并自己提供其依赖项(根据需要使用伪造或模拟)。
如果您确实需要使用Guice,请预先警告这不再是单元测试,现在更像是系统测试或集成测试。此时,您需要诊断对所需的bindScope
的调用,并考虑将其提取到测试帮助程序中,以使其余的测试更容易。