我有一个生产者类,注解@Singleton
,其中包含一个注解为@Produces
的方法。焊接CDI:使用@Alternative @Singleton
我想用这种方法的替代方法编写单元测试,但无法做到这一点。这里是我的代码摘要:
package fr.easycompany.easywrite.tools.injection;
@Singleton
public class Producers {
@Produces @Named(PREFERENCES_FILE_NAMED)
public String producePreferenceFileName(){
return "preferences.xml";
}
}
而我的另一种方法:
package fr.easycompany.easywrite.tools.injection;
@Singleton
@Alternative
public class ProducersAlternative {
@Produces @Named(PREFERENCES_FILE_NAMED)
public String producePreferenceFileName(){
return "preferences_test.xml";
}
}
我还创建了一个beans.xml文件放在src /测试/资源/ META-INF,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:weld="http://jboss.org/schema/weld/beans"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
<alternatives>
<class>fr.easycompany.easywrite.tools.injection.ProducersAlternative</class>
</alternatives>
</beans>
执行时,总是调用Producers#producePreferenceFileName()
。为什么不是ProducersAlternative
的方法?是不可能有一个单身注入类的替代品?
我试过你的代码,它工作正常。 ProducersAlternative#producePreferenceFileName()按预期调用。 –