当前位置: 首页 > 知识库问答 >
问题:

CDI-Unit@产品不工作

樊琦
2023-03-14

首先,我密集地谷歌了一下,根据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;

  ...
}

例外情况:

组织。jboss。焊接例外情况。DeploymentException:包含3个异常的异常列表:

异常0:org.jboss.weld.exceptions.部署异常: WELD-001408:带限定符的类型记录器的不满意依赖@默认在注入点[BackedAnnotatedField]@注入私有at.fhhagenberg.unitTesting.beans.SurveyBean.log...

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

有人知道怎么解决这个问题吗?

PS:不允许添加的标签:cdi单位,jglue

共有1个答案

陶睿
2023-03-14

您需要将生产者方法放入与DBUnitBaseTest分开的类中。此类是抽象的,不能用作CDI生产者。EM和logger的生产者方法。

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

 类似资料:
  • 它有一个servlet和一个JAX-RS资源POJO,两者都运行良好。接下来,我在与servlet和JAX-RS POJO相同的包中创建了一个类: 当我访问POJO的rest路径时,我在Glassfish日志中得到消息:

  • 本文向大家介绍unit-testing 资产注入,包括了unit-testing 资产注入的使用技巧和注意事项,需要的朋友参考一下 示例 属性注入允许在创建类依赖关系后对其进行更新。如果要简化对象创建,但是仍然允许测试双精度测试覆盖依赖项,这可能很有用。 考虑一个需要在错误情况下写入日志文件的类。该类知道如何构造一个default Logger,但是允许通过属性注入覆盖它。但是,值得注意的ILog

  • 我对Java EE(依赖项注入)有点陌生,我不明白为什么@inject给我的是null,但是initialcontext.dolookup确实起作用。 这是我的豆子。它只是一把刀。EntityManager的包装器 --jar(PersonData-EJB模块-包含PersonManager) --war(PersonRest-web模块-包含PersonService)

  • 我正在尝试在我的应用程序中实现注销,因此我做了以下操作: 但是当我检查用户是否登录时,它说是: 我错过什么了吗?在使会话无效后,我是否应该获得一个新的AuthorizedUser实例(sessionScoped)? 编辑:如果有人需要,添加getHandler;)

  • #非技术2023笔面经# 公司:比亚迪 岗位:产品工程师 一面: 1.自我介绍 2为什么你想加入比亚迪 3给的关键词你有什么感想 4比亚迪智能驾驶这一块的理解是什么 5 智能驾驶由什么驱动 6 比赛经验,实习经验 7.你觉得自己的优势和劣势是什么 8你有什么想问我的吗 面试官很专业,准备的稍微有点不充分

  • 一面:主打一个随意,常规自我介绍后,然后你介绍一下自己的学校,主要考察你的宣讲能力,其次就是问你懂不懂模电数电,多少分,然后我直接说不懂,学的不深,然后看到我六级过了让我来段英语的自我介绍,我直接坦白说口语不行来不了,主打一个随意。后面给我来道情景题,假如你是一个产品工程师,客户的需求我们公司现有的产品无法满足,但是研发部同时也做不出能够满足这个需求的产品,请问你怎么做,然后我巴拉巴拉一顿之后他直