重新绑定无国籍的ejb

时间:2015-07-30 08:29:36

标签: java unit-testing ejb

无状态bean在部署到应用服务器时工作正常,

@Stateless(name = "UtilitiesPersonClient")
@Loggable
public class UtilitiesPersonClient {

正确显示日志节目的输出:

java:global/my-app/UtilitiesPersonClient
java:app/my-app/UtilitiesPersonClient
java:module/UtilitiesPersonClient

然而,在我的测试中,当我尝试将此bean重新绑定到模拟时,它只是没有反弹并且没有抛出错误:

ejbContainer = EJBContainer.createEJBContainer(p);

@Override
@Before
public void setUp() throws Exception {
    super.setUp();
    UtilitiesPersonClient mockService = mock(UtilitiesPersonClient.class);
    when(mockService.getMyMap(anyCollection())).thenReturn(mockedMap());
    ejbContainer
            .getContext()
            .rebind("java:module/UtilitiesPersonClient", mockService);
}

如何使用ejbcontainer重新绑定无状态bean?

1 个答案:

答案 0 :(得分:0)

重新绑定实际上并没有改变现有实例。它只会改变尚未发生的绑定。

因此,为了克服这个问题,我只是简单地注入了调用类,并将调用类更改为setter。然后我使用setter直接改变实例。

@EJB
private MyService myService;

@Before
public void setUp() throws Exception {
    super.setUp();
    UtilitiesPersonClient mockService = mock(UtilitiesPersonClient.class);
    when(mockService.getMyMap(anyCollection())).thenReturn(mockedMap());
    myService.setUtilitiesPersonClient(mockService);
}