Attualmente sto lavorando ad alcuni strumenti di monitoraggio usando aspectj. Poiché questo strumento dovrebbe essere indipendente dalla tecnologia (per quanto possibile), non sto utilizzando Spring for injection. Ma voglio che i miei aspetti siano testati unitamente.Come prendere in giro un aspetto
esempio Aspetto:
@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;
}
}
Comunque, io davvero non so, come costruire test di unità (il campo repository dovrebbe essere preso in giro (utilizzando Mockito)), ma non ho la creazione di aspetto sotto controllo, da qui Non riesco a impostare la dipendenza manualmente. Cosa dovrei chiamare per ottenere l'istanza? Oppure c'è qualche altro scenario su come testare l'aspetto di aspetti unitari.
Grazie.
Quello che non mi piace nella mia soluzione: la sostituzione globale del metodo statico rende difficile per testare - devo resettare il mock repository manualmente (invece di impostare uno nuovo). Ho anche dovuto intrudire un portatore di mock per ottenere l'accesso all'oggetto repository finto. La terza cosa è che non mi piace temperare con il bytecode per impostare la simulazione, penso davvero che questo debba essere fatto con mezzi standard del linguaggio (se non è possibile, imho mostra una mancanza di aspetto design). Ma dal codice, la soluzione potrebbe fare (almeno non ha bisogno del titolare) :-). – malejpavouk
Punto preso, la taglia è tua. Grazie :-) – malejpavouk
Ci scusiamo per il rumore. Ho deciso di aggiungere i commenti alla mia risposta perché il numero di caratteri disponibili per i commenti era troppo piccolo. Ma grazie comunque per avermi assegnato la taglia. :) – kriegaex