Obecnie pracuję nad narzędziem do monitorowania wykorzystującym aspektj. Ponieważ to narzędzie powinno być niezależne od technologii (o ile to możliwe), nie używam Springa do iniekcji. Ale chcę, aby moje aspekty zostały przetestowane na podstawie testów jednostkowych.Jak wyśmiać aspekt
przykład Aspekt:
@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;
}
}
Jednak ja naprawdę nie wiem, jak skonstruować testów jednostkowych (pole repozytorium powinno być wyśmiewany (używając Mockito)), ale nie mam tworzenia obrazu pod kontrolą, stąd Nie mogę ustawić zależności ręcznie. Co mam wywołać, aby uzyskać instancję? Lub jest jakiś inny scenariusz, jak testować aspekty aspektu jednostkowego.
Dzięki.
Co mi się nie podoba w moim roztwór: globalne zastąpienie statycznej metody sprawia, że trudno przetestować - muszę ręcznie zresetować repozytorium makiety (zamiast ustawiania nowego). Musiałem także wprowadzić fałszywego właściciela, aby uzyskać dostęp do fałszywego obiektu repozytorium. Trzecią rzeczą jest to, że nie lubię temperować z bajtowym kodem, aby ustawić próbę, naprawdę myślę, że to musi być zrobione standardowymi środkami języka (jeśli nie jest to możliwe, to imho pokazuje niedobór aspektu projekt). Ale z kodu, twoje rozwiązanie może (przynajmniej nie potrzebuje posiadacza) :-). – malejpavouk
Punkt wzięty, nagroda jest twoja. Dzięki :-) – malejpavouk
Przepraszamy za hałas. Postanowiłem dodać komentarze do mojej odpowiedzi, ponieważ liczba znaków dostępnych dla komentarzy była zbyt mała. Ale dzięki za nagrodzenie mnie nagrodą. :) – kriegaex