焊接和测试罐

时间:2014-02-03 09:33:48

标签: java maven dependency-injection cdi weld

我们有一个maven多模块项目,包含以下模块:

  • PRJ-SRV
  • PRJ的客户端

srv项目包含EJB。在prj-srv / src / test中,我们有@Alternative的实现,在beans.xml的alternative部分中指定。这很有效。

项目prj-client将prj-srv作为依赖项。此外,它依赖于test-jar类型的prj-srv,范围测试,因此它可以使用替代EJB实现进行测试。这也有效。

现在:在prj-client / src / main / java中,我们有使用限定符@Cacheable注释的EJB接口的本地实现(以便我们可以缓存数据)。我想做的是在prj-client / src / test / java中设置测试,以便他们使用我的prj-srv的测试实现(那些不可缓存,但是因为它是用于测试的人)。

我试过了:

  • 在prj-client / src / test / java中创建一个带有生成器方法的类(@Produces @Alternative @Cacheable),但我不知道如何配置beans.xml来设置它作为替代方法

  • 在prj-srv / src / test / java中创建扩展测试EJB的类,注释@Alternative @Cacheable,并将它们放在替代品中的src / test / resources / META-INF / beans.xml中部分,但焊接仍然从src / main / java注入“真正的”@Cacheable bean。

将@Alternative与限定符混合有问题吗?如何让我的测试使用合格类的替代实现?

1 个答案:

答案 0 :(得分:1)

刚刚找到它:我忘记用@Inject标记@Cacheable实现的构造函数。显然,即使它在beans.xml中被标记为替代,因为Weld不知道如何初始化它,而不是抛出错误,它只是默默地决定忽略替代...