我无法通过应用程序界面访问 Play2 测试中的绑定实例。
使用 Play2.5,假设一个使用 Guice for DI 的应用程序,其 Guice 模块具有:
@Singleton
@Provides
protected MyThing<String, Foo, Bar> createMyThing() {
}
在使用 WithApplication 的 junit 集成测试中,我使用标准的 play2 类来做到这一点:
public class ApplicationTest extends WithApplication {
private Application playApp;
@Override
protected Application provideApplication() {
playApp = new GuiceApplicationBuilder().build();
}
@Test
public void testInject() {
playApp.injector().instanceOf(new BindingKey<>(MyThing.class));
}
}
这失败了
No implementation for MyThing was bound
即使在调试器中,我看到 Guice 注入器有一个绑定:
MyThing<String, Foo, Bar> -> instance
现在,虽然有 Guice 本身的解决方案,但我似乎无法直接访问这些解决方案,并且 Play DI 抽象似乎不提供指定泛型的功能。
这个技巧似乎可以通过要求播放注入器包装器返回绑定的 Guice 注入器来获取 Guice 注入器:
play.inject.Injector playInjector = playApp.injector();
com.google.inject.Injector guiceInjector = playInjector.instanceOf(com.google.inject.Injector.class);