Я хотел бы протестировать свое приложение в Джакарте (Payara) просто с помощью JUnit Test (без arquillian, без MicroShed).
Я использую ServiceLocator из Hk2, чтобы внедрить службу и она хорошо работает для моей сущности и службы JPA.
private static ServiceLocator serviceLocator;
@BeforeAll
public static void setUpBeforeClass() {
serviceLocator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
ServiceLocatorUtilities.addClasses(
serviceLocator,
EntityManagerHK2Factory.class,
ProducerUtils.class,
FishService.class,
ShopRepository.class,
Family.class, Fish.class, FishStockKey.class, Shop.class, Stock.class, WaterType.class);
}
@Test
public void it_should_sell_fish() {
//GIVEN
FishService fishService = serviceLocator.getService(FishService.class);
String shopName = "Magic Fish";
String fishName = "Scalaire";
int quantity = 3;
//WHEN
float bill = fishService.sell(shopName, fishName, quantity);
//THEN
assertThat(bill, is(54f));
}
Но у меня есть некоторые проблемы, поскольку я включил событие CDI в свой FishService.
@Inject
private Event<StockEvent> stockEvent;
И затем я запускаю событие.
При запуске теста serviceLocator не удается создать FishService, и я получаю следующую ошибку:
A MultiException has 3 exceptions. They are:
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=Event<StockEvent>,parent=FishService,qualifiers={},position=-1,optional=false,self=false,unqualified=null,976949492)
2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.meynier.jakarta.service.FishService errors were found
3. java.lang.IllegalStateException: Unable to perform operation: resolve on com.meynier.jakarta.service.FishService
В этом тестовом классе я не хочу тестировать функцию CDI события.
Как я могу использовать Hk2 для внедрения службы событий CDI? (Мой код является хостом в этой учетной записи github )