まず、私は集中的にグーグルで検索し、 http://jglue.org/cdi-unit-user-guide/によると、単体テストで注入するものを作成するとうまくいくはずです。
私のセットアップ:
@RunWith(CdiRunner.class)
public abstract class CdiUnitBaseTest extends DBUnitBaseTest {
@Produces
public EntityManager em() {
return em; //field from base class filled @BeforeClass
}
@Produces
public Logger logger() {
return LogManager.getLogger();
}
}
public class SurveyBeanTest extends CdiUnitBaseTest {
@Inject
private SurveyBean bean;
@Test
public void surveyWithoutParticipation() {
Survey s = new Survey();
s.setParticipation(new ArrayList<Participation>());
boolean result = this.bean.hasParticipated("12ST", s);
Assert.assertFalse(result);
}
}
@Remote(SurveyRemote.class)
@Stateless
public class SurveyBean implements SurveyRemote {
@Inject
private Logger log;
@Inject
private SurveyDao sDao;
@Inject
private ParticipationDao pDao;
...
}
例外:
org.jboss.weld.exceptions.DeploymentException: 3 つの例外を含む例外リスト:
例外 0 : org.jboss.weld.exceptions.DeploymentException: WELD-001408: インジェクション ポイント [BackedAnnotatedField] で修飾子 @Default を持つタイプ Logger の満たされていない依存関係 [BackedAnnotatedField] @Inject private at.fhhagenberg.unitTesting.beans.SurveyBean.log ...
これは、CdiRunner が SurveyBean を構築してロガーを注入しようとするが、注入するオブジェクトを見つけられないことを意味しますが、具体的には基本クラスで生成します (EntityManager についても同様です)。
誰でもこれを修正する方法を知っていますか?
PS: 追加を許可されていないタグ: cdi-unit、jglue