gpt4 book ai didi

java - CDI-Unit @Produces 不工作

转载 作者:行者123 更新时间:2023-11-30 03:14:23 26 4
gpt4 key购买 nike

首先,我在谷歌上进行了深入的搜索,根据http://jglue.org/cdi-unit-user-guide/生成要在单元测试中注入(inject)的内容应该可以正常工作。

我的设置:

@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;

...
}

异常(exception):

org.jboss.weld.exceptions.DeploymentException:包含 3 个异常(exception)的异常(exception)列表:

异常 0:org.jboss.weld.exceptions.DeploymentException:WELD-001408:带有限定符@Default的类型Logger的依赖关系不满足 在注入(inject)点 [BackedAnnotatedField] @Inject private at.fhagenberg.unitTesting.beans.SurveyBean.log ...

这意味着 CdiRunner 尝试构建我的 SurveyBean 并注入(inject)记录器,但它找不到要注入(inject)的对象,尽管我专门在基类中生成了它(对于 EntityManager 也是如此)。

有人知道如何解决这个问题吗?

PS:我不允许添加标签:cdi-unit、jglue

最佳答案

您需要将生产者方法放入与 DBUnitBaseTest 不同的类中。该类是抽象类,不能用作 CDI 生成器。 em 和 logger 的生产者方法。

这是因为具有生成器方法/字段的类本身必须是 CDI bean - CDI 在调用生成器方法之前创建该类的实例。并且 CDI 无法从抽象类创建 bean。此外,@Producer 注释不会被继承,因此 SurveyBeanTest 继承的方法不会被视为生产者。

关于java - CDI-Unit @Produces 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32977594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com