Tel*_*tko 15 java ejb mocking java-ee jboss-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.
是否有人分享经验,如何测试和设置此类集成测试,甚至使用模拟框架?
小智 3
IMO,EJB 的设计并没有考虑到测试。你的替代方案听起来是一个足够好的妥协方案,我会选择它。使用mockito 是一个主要优点,即使在使用CDI 时我也会使用它。
我将使用“默认”成员范围和 javadoc 来让其他开发人员仅出于测试目的访问它们。
归档时间: |
|
查看次数: |
9896 次 |
最近记录: |