2010-11-26 11 views
1

バインディングと注釈に関する質問があります。AbstractModuleを実装するクラスのアノテーションオブジェクトをテストする方法

public class MailFacadeImpl implements MailFacade { 

    private final PersonDao personDao; 

    @Inject 
    public MailFacadeImpl(@Mail PersonDao personDao) { 
    super(); 
    this.personDao = personDao; 
    } 

PersonDaoがカスタムアノテーションを付けている:

は、私は以下のクラスを持っています。 AbstractModuleを実装するクラス内でこの注釈をテストしたいと考えています。ここ

は、コードの一部です:

bind(new TypeLiteral<SecurityRulesFactory<Person>>(){}).toProvider(FactoryProvider.newFactory(
    new TypeLiteral<SecurityRulesFactory<Person>>(){}, new TypeLiteral<MailSecurityRulesCrdb>(){})); 

私はと類似気にいらがしたい:

if(PersonDAO is annotated with(Mail.class)){ 
bind(new TypeLiteral<SecurityRulesFactory<Person>>(){}).toProvider(FactoryProvider.newFactory(
    new TypeLiteral<SecurityRulesFactory<Person>>(){}, new TypeLiteral<MailSecurityRulesCrdb>(){})); 
} 

を、あなたはそれが可能だと思いますか?

あなたの助けを借りて:-) いい金曜日にお過ごしください!

+0

私はこれを見つけました:PersonDao.class.isAnnotationPresent(Mail.class)。多分それは動作します。私はテストします。 – AbstractMan

答えて

0

モジュールがこのテストを行う理由はわかりません。 PersonDaoクラス自体はMailでアノテートされていないため、

bind(PersonDao.class).annotatedWith(Mail.class).to(EmailAwarePersonDao.class); 

注意ごPersonDao.class.isAnnotationPresent(Mail.class)がここに助けにはなりません。その代わりに、あなたのモジュールは、取得したりMailで注釈を付け注入点についてPersonDaoのインスタンスを作成する方法を指定することができます; MailFacadeImplコンストラクタへのパラメータにはその注釈があります。それをテストする方法はありますが、Guiceモジュールからそれを実行しようとしているなら、おそらく何か間違っているでしょう。

関連する問題