在测试中模拟EJB注入

eli*_*ocs 5 java junit ejb easymock

每当我想测试一个使用资源注入的类时,我最终会包含一个只在测试中使用的构造函数:

public class A {

    @EJB
    B b;

    // Used in tests to inject EJB mock
    protected A(B b) {
        this.b = b;
    }

    public A() {}

    // Method that I wish to test
    public void foo() {
        b.bar();
    }

}
Run Code Online (Sandbox Code Playgroud)

是否存在另一种模拟资源注入的方法,或者这是正确的模式?

use*_*154 1

你可以使用简单的光泽来达到这种效果,它模拟了 EJB 注入系统。

另一种方法是在测试中使用反射来设置字段,我有时使用这样的方法:

public static void setPrivateField(Class<? extends Object> instanceFieldClass, Object instance, String fieldName, Object fieldValue) throws Exception {
    Field setId = instanceFieldClass.getDeclaredField(fieldName);
    setId.setAccessible(true);
    setId.set(instance, fieldValue);
}
Run Code Online (Sandbox Code Playgroud)