tutorial - spring pruebas unitarias
Pruebas unitarias Spring @Around AOP métodos (1)
Puedes probar un Spring Aspect creando un proxy programáticamente:
MyInterface target = new MyClass();
AspectJProxyFactory factory = new AspectJProxyFactory(target);
MyAspect aspect = new MyAspect(arg);
factory.addAspect(aspect);
MyInterface proxy = factory.getProxy();
... entonces puede llamar a métodos en proxy
y hacer afirmaciones sobre aspect
, proxy
y target
.
Puedo realizar pruebas de unidad la mayoría de mis clases de Spring sin necesidad de hacer "cosas" de Spring.
Puedo hacer pruebas de unidad antes de los métodos de asesoramiento sin utilizar Spring también:
Código de ejemplo:
@Before("execution(* run(..)) && " + "" +
"target(target) && " +
"args(name)")
public void logName(Object target, String name) {
logger.info("{} - run: {}", target, name);
}
Ejemplo de prueba:
@Test
public void testLogName() {
aspect.setLogger(mockLogger);
aspect.logName(this,"Barry");
assertTrue(mockLogger.hasLogged("TestAspect - run: Barry"));
}
Sin embargo, el consejo de @Around trata con un objeto ProceedingJoinPoint:
@Around("com.xyz.myapp.SystemArchitecture.businessService()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
// start stopwatch
Object retVal = pjp.proceed();
// stop stopwatch
return retVal;
}
No sé cómo crear una instancia de un objeto ProceedingJoinPoint. ¿Cómo puedo probar esta clase sin iniciar un contexto de aplicación Spring completo?