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, являются прокси, а не самими экземплярами объекта.

Ваши юнит-тесты сравнивают прокси-объекты.

Другие вопросы по тегам