对于@Inject、@Produces等的命名空间使用情况,我有点困惑,使用的是焊缝-junit5 5 4.0.0.CR2。我在玩JakartaEE 8+ Java 17,而焊接-Junit53.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 (并生成),则注入notificationDao,但NotificationDaoImpl中的@javax.inject.Inject私有DataSource dataSource为null。
发布于 2022-04-14 04:52:59
通过移动到
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>9.1.0</version>
<scope>provided</scope>
</dependency>
https://stackoverflow.com/questions/71863324
复制相似问题