我有一個生產者類,註解@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()按預期調用。 –