У меня есть класс Продюсеров, аннотированный @Singleton
, содержащий метод, аннотированный @Produces
.Weld 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
? Невозможно ли иметь альтернативу одного инъекционного класса?
Я пробовал ваш код, и он отлично работает. ПроизводителиАлтернативный # productPreferenceFileName() вызывается как ожидалось. –