Я начал с книги Начиная с Java EE7, в настоящее время занятой главой CDI. Мой альтернативный класс выглядит ниже.Использование @alternatives в CDI
@Alternative
@ThirteenDigits
public class MockGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Loggable
public String generatorNumber() {
String mock = "MOCK-" + Math.abs(new Random().nextInt());
logger.info("Generated mock : " + mock);
return mock;
}
}
Другой класс зависимостей, который я использую, как показано ниже
@ThirteenDigits
public class IsbnGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Loggable
public String generatorNumber() {
String isbn = "13-84356-" + Math.abs(new Random().nextInt());
logger.info("Generated ISBN : " + isbn);
return isbn;
}
}
Мой файл beans.xml выглядит, как показано ниже.
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org.2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/sml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
<alternatives>
<class>com.narotech.MockGenerator</class>
</alternatives>
<interceptors>com.narotech.LoggingInterceptor</interceptors>
</beans>
Мой код для инъекций выглядит следующим образом.
@Inject
@ThirteenDigits
private NumberGenerator numberGenerator;
public Book createBook(String title, Float price, String description) {
Book book = new Book(title, price, description);
book.setNumber(numberGenerator.generatorNumber());
return book;
}
Теперь, я не знаю, почему, но когда я запускаю мой JUnit тест, я получаю «13-84356-683584002», а не что-то вроде «ПРОБНОЙ-84356-683584002». Может ли кто-нибудь сказать мне, что я делаю неправильно. Дайте мне знать, если вам нужна дополнительная информация от меня.
Как вы инициализируете cdi в своем тесте? –
Просто попробуйте использовать @Priority, чтобы активировать вашу альтернативу. Если он работает, проблема возникает из beans.xml, который вы предоставляете для своего теста, в противном случае у вас есть где-то в коде .... –
Спасибо. аннотация @Priority работала – R3LL1K