CDI:为什么我在单元测试中得到两个 javax.ejb.Singleton 实例?
CDI: Why am I getting two instances of javax.ejb.Singleton in my unit test?
得到一个 class 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
生产的 beans 将通过。
问题
为什么 @Singleton
的测试失败但 @ApplicationScoped
的测试通过?
EJB 的@Injected 对象是代理,而不是对象实例本身。
您的单元测试正在比较代理对象。
得到一个 class 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
生产的 beans 将通过。
问题
为什么 @Singleton
的测试失败但 @ApplicationScoped
的测试通过?
EJB 的@Injected 对象是代理,而不是对象实例本身。
您的单元测试正在比较代理对象。