Сварка-junit5 4.0.0.CR1 путаница пространства имен
Я немного запутался в использовании пространства имен для @Inject, @Produces и т. д. в сварке-junit5 4.0.0.CR2. Я играю с JakartaEE 8 + Java 17, и Weld-junit5 3.x расстроился, поэтому я думаю, что 4.x - это путь?
Проблема в том, что с тестовым классом вроде
@EnableWeld
public class TestNotificationDao {
@WeldSetup
public WeldInitiator weld = WeldInitiator.of(NotificationDao.class, NotificationDaoImpl.class, TestNotificationDao.class);
@Inject
private NotificationDao notificationDao;
public TestNotificationDao() {
}
@Produces
static DataSource getDataSource() {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setURL("jdbc:mysql://localhost:3306/sps?useSSL=false");
dataSource.setUser("sps");
dataSource.setPassword("sps");
dataSource.setDatabaseName("sps");
return dataSource;
}
@Test
public void testLoadQueuedNotifications() {
Collection<QueuedNotification> notifications = notificationDao.getQueuedNotifications(1);
assertEquals(1, notifications.size());
}
}
Если я использую javax.inject.Inject, notificationDao имеет значение null, а если я использую jakarta.inject.Inject (и Produces), notificationDao вводится, но частный источник данных DataSource @javax.inject.Inject внутри NotificationDaoImpl имеет значение null.
1 ответ
Решается переходом на
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>9.1.0</version>
<scope>provided</scope>
</dependency>