2016-09-13 5 views
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」を取得していません。誰かが私が間違っていることを教えてもらえますか?あなたが私からのより多くの情報を必要とするかどうか教えてください。

+0

テストではどのようにcdiを初期化しますか? –

+2

代わりに@Priorityを使ってテストしてみてください。それがうまくいくなら問題はあなたがあなたのテストのために提供するbeans.xmlから来ます。そうでなければ、コードのどこかにあります。 –

+0

ありがとう。 @Priorityアノテーションが機能しました – R3LL1K

答えて

0

私はこの問題を解決できました。私は単純に@PriorityアノテーションをMockGeneratorクラスに追加しました。

関連する問題