現在、私はaspectjを使っていくつかの監視ツールを開発中です。このツールは技術に依存しないように(可能な限り)、私はSpring for injectionを使用していません。しかし、私は自分の側面をユニットテストしたい。アスペクトを模擬する方法
アスペクト例:
@Aspect
public class ClassLoadAspect {
private Repository repository;
public ClassLoadAspect() {
repository = OwlApiRepository.getInstance();
}
@After("anyStaticInitialization()")
public void processStaticInitilization(JoinPoint jp) {
Class type = jp.getSourceLocation().getWithinType();
if (type.isInterface()) {
repository.storeInterfaceInitialization(type);
} else if (type.isEnum()) {
repository.storeEnumInitialization(type);
} else {
repository.storeClassInitialization(type);
}
}
@Pointcut("staticinitialization(*) && !within(cz.cvut.kbss.odra..*)")
public void anyStaticInitialization() {
}
public Repository getRepository() {
return repository;
}
public void setRepository(Repository repository) {
this.repository = repository;
}
}
しかし、それゆえ、私は本当にユニットテスト(リポジトリフィールドは嘲笑されなければならない(使用mockito))を構築する方法を、知らない、しかし、私は制御の下で、アスペクトの作成を持っていません依存関係を手動で設定することはできません。インスタンスを取得するにはどうすればよいですか?あるいは、アスペクトのアスペクトをユニットテストする方法についての他のシナリオがあります。
ありがとうございました。
私は私の溶液中で好きではないもの:静的メソッドのグローバルな交換が、それは難しいテストすることができます - (代わりに新しいものを設定するので)私は手動でレポジトリモックをリセットする必要があります。私はモックリポジトリオブジェクトにアクセスするためにモックホルダーを導入する必要もありました。 3番目のことは、私はモックを設定するためにバイトコードで気質が好きではないということです。私は本当にこれが言語の標準的な手段で行われなければならないと考えています(可能ならば、imhoはaspectj設計)。しかし、コードから、あなたの解決策は(少なくとも所有者は必要ありません):-)。 – malejpavouk
ポイントは獲得、賞金はあなたのものです。ありがとう:-) – malejpavouk
申し訳ありません。コメントに使用できる文字数が少なすぎるため、私は答えにコメントを追加することにしました。しかし、とにかく恩恵を受けてくれてありがとう。 :) – kriegaex