Weld 3 + junit 5, преобразователь ресурсов согласно свойствам системы
Я использую weld 3 + junit 5 для тестирования модуля и интеграции, вот пример:
@EnableWeld
public class CartServiceTest {
@WeldSetup
public WeldInitiator weld = WeldInitiator
.from(
CartService.class,
CartDAO.class,
MockResources.class
)
.build();
@DisplayName("remove cart")
@Test
void remove_cart(CartService cartService) {
final String id = "C-55-0000015995";
Assertions.assertDoesNotThrow(() -> cartService.delete(id));
}
}
MockResources - это класс, который разрешает все реализации
@ApplicationScoped
public class MockResources {
private EntityManager entityManager;
@PostConstruct
public void init() {
entityManager = Persistence.createEntityManagerFactory("db-test").createEntityManager();
}
@Produces
public Logger produceLog(InjectionPoint injectionPoint) {
return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
@Default
@Produces
public EntityManager getEntityManager() {
return entityManager;
}
...
Теперь я хочу, чтобы реализации ресурсов системных свойств разрешались по-разному, например, передавая -Denv=LO, можно было бы подключиться к базе данных h2, тогда как передача TS вместо этого подключилась бы к реальной БД.
Я предполагаю создать фабрику, которая разрешает интерфейс MockResource для класса реализации среды для всех выделенных ресурсов, но как?