0
私はJava EE7の初めからCDIの章で忙しいと思っています。 私の代替クラスは以下のようになります。CDIの@alternativesの使用
@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;
}
}
私が使用している他の依存クラスは、私のbeans.xmlファイルは、以下のようになります
@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 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テストを実行したとき、私は「MOCK-84356から683584002」のようなものを「13-84356-683584002」を取得していません。誰かが私が間違っていることを教えてもらえますか?あなたが私からのより多くの情報を必要とするかどうか教えてください。
テストではどのようにcdiを初期化しますか? –
代わりに@Priorityを使ってテストしてみてください。それがうまくいくなら問題はあなたがあなたのテストのために提供するbeans.xmlから来ます。そうでなければ、コードのどこかにあります。 –
ありがとう。 @Priorityアノテーションが機能しました – R3LL1K