서비스 의존성이 주입 된 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();
}
다음 : 나는 HikariModule
내 응용 프로그램에 지속성을 추가 시작할 때까지
@Inject
private UserService userService;
이것은 잘 작동했다. 내가 HikariModule
guice 주입 시험에서 실패에서 DataSource
클래스는 오는에 따라 서비스가있는 경우 내 레지스트리 지금 여러 모듈로 구성되어 있기 때문에
.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))
: 지금 Guice 레지스트리 생성은 조금 더 복잡하다.
내 목표는 다음과 같은 방식으로 테스트를 작성을 허용하는 것입니다 :
@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());
}
테스트에서 서비스 종속성을 주입의 올바른 접근 방식은 무엇입니까? 나는 내 자신을 만들고 오버 라이딩하는 것보다는 guys 모듈을 MainClassApplicationUnderTest
에서 재사용하는 것을 매우 좋아한다.