小编Tel*_*tko的帖子

如何使用Arquillian模拟服务?

是否有可能使用Arquillian的某种模拟框架,或者精确地如何模拟注入的EJB?我知道,通过使用CDI(上下文和依赖注入),可以在测试中注入替代方案.但是如果没有CDI作为注入机制,当我只使用EJB注入时,这怎么可能呢?

最近我用服务接口模拟实现测试了我的EJB如下:

// Service inteface 
public interface Audit {
   void audit(String info);
}

// Mock implementation
@Stateless
public class MockAuditBean implements Audit {

    public static String lastInfo = null;

    @Override
    public void audit(String info) {
        this.lastInfo = info;
    }
}

// assert in test
assertTrue(MockAuditBean.lastInfo.contains("dummy"));
Run Code Online (Sandbox Code Playgroud)

这种方法是可行的,但需要大量的自定义模拟实现.更糟糕的是,注入的模拟实例是代理并使用服务接口.这些不能转换为模拟实现类来比较结果.只能使用静态成员和模拟实现方法.

我还测试了另一种手动设置相关EJB的可能性.这种方法有几个缺点.它要求测试的目标EJB具有非私有成员或设置者.当目标EJB依赖于@PostConstruct生命周期注释时,您必须在手动"注入"设置后调用它.此解决方案的优点是能够使用模拟框架,如mockito或jMock.

是否有人分享经验,如何测试和设置此类集成测试,甚至使用模拟框架?

java ejb mocking java-ee jboss-arquillian

15
推荐指数
1
解决办法
9896
查看次数

标签 统计

ejb ×1

java ×1

java-ee ×1

jboss-arquillian ×1

mocking ×1