Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何测试Guice抽象模块的实现?_Unit Testing_Configuration_Bind_Guice_Inject - Fatal编程技术网

Unit testing 如何测试Guice抽象模块的实现?

Unit testing 如何测试Guice抽象模块的实现?,unit-testing,configuration,bind,guice,inject,Unit Testing,Configuration,Bind,Guice,Inject,如何在一个大项目中测试Guice AbstractModule的实现,而不创建虚假的实现?可以测试bind()和injection()方法吗?通常,测试Guice模块的最佳方法是在测试中创建一个注入器,并确保可以从中获得所关心的键实例 要做到这一点而不导致生产工作发生,您可能需要用其他模块替换某些模块。您可以使用Modules.override有选择地覆盖单个绑定,但通常最好不要安装“生产”类型的模块,而是使用伪造的绑定 自Guice 4.0以来,有一个助手类可以帮助实现这一点。我经常设置以下测

如何在一个大项目中测试Guice AbstractModule的实现,而不创建虚假的实现?可以测试bind()和injection()方法吗?

通常,测试Guice模块的最佳方法是在测试中创建一个注入器,并确保可以从中获得所关心的键实例

要做到这一点而不导致生产工作发生,您可能需要用其他模块替换某些模块。您可以使用
Modules.override
有选择地覆盖单个绑定,但通常最好不要安装“生产”类型的模块,而是使用伪造的绑定

自Guice 4.0以来,有一个助手类可以帮助实现这一点。我经常设置以下测试:

公共最终类MyModuleTest{
@Bind@Mock-DatabaseConnection-dbConnection;
@绑定@Mock SomeOtherDependency SomeOtherDependency;
@注入提供者myThingProvider;
@在公共作废设置()之前{
initMocks(this);
createInjector(新的MyModule(),BoundFieldModule.of(this))
.成员(本);
}
@测试公共void testCanInjectMyThing(){
myThingProvider.get();
}
}

Guice wiki上还有更多内容。

您可以通过创建
注入器
来测试模块实现,然后通过调用
getInstance()
来断言绑定:


您不想测试框架,所以只需信任绑定和注入工作正常的guice即可。如果您想测试您的模块实现,请查看Modules.overwrite,您可以保留您的生产模块并覆盖足够的伪/模拟内容,以便您仍然可以轻松地对其进行单元测试。谢谢您的回答。很抱歉,我无法解析BoundFieldModule类和@Bind annotation。@尼古拉斯:您也可以在测试中创建一个匿名的
AbstractModule
子类,当然--
BoundFieldModule
只是一个快捷方式。(如果您的项目中没有,您可能需要将Guice升级到最新版本。)答案的重要部分是,确保依赖关系正确的最佳方法是在测试中创建一个
注入器
,并验证它是否按预期工作。@Nikolas我不得不将Guice testlib工件添加到maven depdencies,它位于com.google.inject.extensions组ID下。Maven central上列出了4.2.0版,但我只下载了4.1.0版。
Injector injector = Guice.createInjector(new SomeModule());
assertNotNull(injector.getInstance(SomeSingleton.class));