Actualmente estoy trabajando en una herramienta de supervisión que utiliza aspectj. Debido a que esta herramienta debe ser independiente de la tecnología (en la medida de lo posible), no estoy usando Spring para inyección. Pero quiero que mis aspectos sean sometidos a pruebas unitarias.Cómo burlarse de un aspecto
ejemplo Aspecto:
@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;
}
}
Sin embargo, yo realmente no sé, cómo construir unidad de prueba (el campo repositorio debería ser burlado (usando Mockito)), pero no tengo la creación de aspecto bajo control, por lo tanto, No puedo configurar la dependencia de forma manual. ¿A qué debo llamar para obtener la instancia? O hay algún otro escenario de cómo evaluar los aspectos aspectj de la unidad.
Gracias.
Lo que no me gusta en mi solución: la sustitución global del método estático hace que sea difícil para poner a prueba - Me debe restablecer el simulacro repositorio manualmente (en lugar de establecer una nueva). También tuve que intruducir un titular falso para obtener acceso al objeto de repositorio simulado. La tercera cosa es que no me gusta templarme con el bytecode para establecer el simulacro, realmente creo que esto tiene que hacerse por medios estándar del lenguaje (si no es posible, muestra una deficiencia en el aspecto). diseño). Pero desde el código, su solución podría hacer (al menos no necesita el titular) :-). – malejpavouk
Punto tomado, la generosidad es tuya. Gracias :-) – malejpavouk
Perdón por el ruido. He decidido agregar los comentarios a mi respuesta porque la cantidad de caracteres disponibles para los comentarios era demasiado pequeña. Pero gracias de todos modos por otorgarme la recompensa. :) – kriegaex