当我使用Spring并希望编写单元测试时,我可以通过各种方式指定自定义上下文配置,例如,通过提供context.xml
的不同路径。
但如果我想在同一个maven模块中使用自定义依赖项配置进行测试,我不知道如何为CDI做到这一点。
关于这一点,文档是very strict:
对于EJB模块或JAR文件,beans.xml部署描述符if 现在,必须在META-INF目录中。
如果源中已经有/META-INF/beans.xml
,我就不能将不同的一个放入测试资源中(它将被忽略)。
有没有办法配置Weld / CDI,可能是通过使用一些系统变量来改变beans.xml的路径?
答案 0 :(得分:1)
对于EJB模块或JAR文件,beans.xml部署描述符(如果存在)必须位于META-INF目录中。
这是事实,但是这涉及到已创建/打包的JAR,然后您将其用作应用程序的依赖项。但是你的应用也可以拥有自己的beans.xml
。 beans.xml
只是一种定义一个bean存档和某些结构(拦截器,装饰器......)在存档中的方法。这意味着,例如,除非您在该应用程序的beans.xml
中指定,否则将不会在您的应用程序中启用通过该{JAR库中的beans.xml
启用的拦截器。因此,您在文档和您要求的测试之间看到的链接可能不正确/相关。但不确定我是否让你在那里。
有没有办法配置Weld,可能是通过使用一些系统变量来改变beans.xml的路径?
不,没有。但在EE中,您主要使用Arquillian进行测试,并允许您(除其他外)定义测试部署。在那里,您可以包含您想要的任何自定义beans.xml
。这也是Weld / CDI TCK测试大多数时间使用的。