0
我想寫一個JUnit測試,注入服務依賴關係。Guice注入Ratpack服務器的JUnit測試
protected MainClassApplicationUnderTest aut = new MainClassApplicationUnderTest(App.class) {
@Override
protected void addImpositions(final ImpositionsSpec impositions) {
impositions.add(UserRegistryImposition.of(appRegistry -> {
// Allow modifying Injector in tests
return appRegistry.join(Guice.registry(injector));
}));
}
};
private Injector injector = com.google.inject.Guice.createInjector(new Module());
@Before
public void setup() {
injector.injectMembers(this);
}
@After
public void tearDown() {
aut.close();
}
,然後用注射服務在我的測試類:
@Inject
private UserService userService;
這是工作的罰款,直到我開始添加持久化到我的應用程序HikariModule
。現在吉斯註冊表創作是一個比較複雜的:
.join(Guice.registry(b -> b
.module(HikariModule.class, hikariConfig -> {
final String dbUrl = System.getenv("JDBC_DATABASE_URL");
hikariConfig.setJdbcUrl(dbUrl);
})
.module(Module.class)
.bind(DbMigrator.class)
).apply(r))
因爲我的註冊表現在由多個模塊組成,如果我有這取決於DataSource
類來從HikariModule
吉斯注射試驗失敗的服務。
我的目標是讓編寫測試以下列方式:
@Inject // <- not required can be done in @Before method
private UserService userService; // <- Inject it somehow from Application under test
@Test
public void testUser() {
final Result<User, String> userResult = userService.create(new User.Registration());
final ReceivedResponse res = aut.getHttpClient().get("https://stackoverflow.com/users/" + user.userId);
assertEquals(200, res.getStatusCode());
}
什麼是測試注射服務的依存關係的正確方法?我非常喜歡重複使用來自MainClassApplicationUnderTest
的guice模塊,而不是創建我自己的並覆蓋它們。