如何在大项目中测试Guice AbstractModule的实现而不创建假实现?有没有可能测试bind()和inject()方法?如何测试Guice AbstractModule的实现?
回答
通常,测试Guice模块的最佳方法是在测试中创建一个注入器,并确保您可以获取您关心的密钥实例。
要做到这一点,而不会导致生产的东西发生你可能需要用其他模块替换一些模块。您可以使用Modules.override
选择性地覆盖单个绑定,但通常最好不要安装“生产”类型的模块并使用伪装绑定。
由于Guice 4.0有帮助类BoundFieldModule
,可以帮助这一点。我经常设置如下测试:
public final class MyModuleTest {
@Bind @Mock DatabaseConnection dbConnection;
@Bind @Mock SomeOtherDependency someOtherDependency;
@Inject Provider<MyThing> myThingProvider;
@Before public void setUp() {
MockitoAnnotations.initMocks(this);
Guice.createInjector(new MyModule(), BoundFieldModule.of(this))
.injectMembers(this);
}
@Test public void testCanInjectMyThing() {
myThingProvider.get();
}
}
Guice wiki上还有更多documentation for BoundFieldModule
。
谢谢你的回答。对不起,但我无法解析** BoundFieldModule **类和** @ Bind **注释。 – Nikolas 2014-11-10 07:47:15
@Nikolas:你可以通过在你的测试中创建一个匿名的'AbstractModule'子类来做同样的事情,当然''BoundFieldModule'只是一个快捷方式。 (如果你的项目中没有,你可能想将Guice升级到最新版本。)答案的重要部分是确保你的依赖关系正确的最好方法是在测试中创建一个'Injector',并验证它是否按预期工作。 – 2014-11-10 19:18:32
- 1. 如何测试实现AbstractModule的类中的注释对象
- 2. Guice AbstractModule安装方法
- 3. Guice:模块测试
- 4. 如何在Guice AbstractModule中使用@Provides方法绑定泛型?
- 5. JUnit测试和Google Guice
- 6. 如何测试算法的实现?
- 7. 你如何测试k-means的实现?
- 8. Guice问题与测试
- 9. 需要引用AbstractModule中Singleton的Guice依赖关系
- 10. Guice ServletScopes.scopeRequest和@RequestParameters测试时
- 11. 在Guice AbstractModule和Servlet模块之间共享绑定
- 12. IList实现测试
- 13. 如何最好地测试Mutex实现?
- 14. 如何使用JPA实现测试DAO?
- 15. 如何实现和测试ASP.NET MVC FakeRepository
- 16. 如何测试一个没有实现
- 17. 如何实现感知器测试
- 18. 如何集成测试TokenCache实现?
- 19. 如何测试扩展实现
- 20. 如何在Google Guice中创建实现的实例
- 21. 如何实现测试隔离测试Oracle PL/SQL?
- 22. 如何实现测试程序(用Java)来测试Csc2001LinkedList方法?
- 23. 如何实现Java测试套件Selenium测试
- 24. 如何在Simulink测试中使用测试工具实现测试自动化?
- 25. Jenkins的Guice注入测试失败
- 26. 如何实现可测试,可维护的实时逻辑?
- 27. Proguard with AbstractModule
- 28. 如何在单元测试中使用带有guice的gwteventbinder
- 29. 如何获得Guice的所有实现者/接口的子类?
- 30. Guice,DI和单元测试在玩2.4
你不想测试框架,所以只要相信绑定和注入的guice工作正常。 如果你想测试你的模块实现,看看Modules.overwrite,你可以保留你的生产模块并覆盖足够的假/模拟的东西,所以你仍然可以很容易地对它们进行单元测试。 – 2014-11-03 19:37:35