CDI: Почему я получаю два экземпляра javax.ejb.Singleton в моем модульном тесте?
Получил класс MyService
с пометкой @javax.ejb.Singleton
,
@Singleton
public class MyService() {
..
}
Модульный тест (Arquillian) ниже не проходит (1 и 2):
@Inject private MyService myService1;
@Inject private MyService myService2;
@Test
public void singletonScopedTest() {
// 1
assertEquals(myService1, myService2);
// 2
assertTrue(myService1== myService2);
}
Тот же тест применяется к @ApplicationScoped
произведенные бобы пройдут.
Вопрос
Почему тест не проходит @Singleton
но пройти @ApplicationScoped
?
1 ответ
Решение
Объекты, которые являются @Injected для EJB, являются прокси, а не самими экземплярами объекта.
Ваши юнит-тесты сравнивают прокси-объекты.