Al escribir aspectos, ¿cómo puedo probar que coinciden y que se invocan cuando quiero?Prueba de AOP Aspecto de primavera
Estoy usando @Aspect
declaraciones con Spring 2.5.6.
No me importa la funcionalidad, que se extrae y prueba de lo contrario.
Al escribir aspectos, ¿cómo puedo probar que coinciden y que se invocan cuando quiero?Prueba de AOP Aspecto de primavera
Estoy usando @Aspect
declaraciones con Spring 2.5.6.
No me importa la funcionalidad, que se extrae y prueba de lo contrario.
que terminó la creación de algo que es un poco de una prueba de integración, de la siguiente manera:
Creado realizar una prueba unitaria Primavera-conscientes
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "aspects-test.xml" })
public class SomeAspectTest {
}
creado una configuración de la primavera de este ensayo, que:
declara un grano que debe ser recogido por el aspecto
<aop:aspectj-autoproxy />
<bean class="SomeAspect">
<property name="userDetailsSource">
<bean class="StubUserDetailsSource"/>
</property>
</bean>
<bean class="DummyService"/>
En la prueba de unidad de recupero el servicio maniquí y invocar sus métodos
@Autowired
private DummyService _dummyService;
@Test(expected = ApplicationSecurityException.class)
public void adminOnlyFails() throws ApplicationSecurityException {
_dummyService.adminOnly();
}
Hay tres cosas diferentes para probar aquí:
Para probar los puntos de corte, se puede definir algunos tipos de prueba que tengan las mismas firmas paquete/tipo/método como los objetivos "reales" destinados, a continuación, definir un consejo de ensayo frente a los puntos de corte para asegurar que están emparejados (también defina algunos tipos que no deberían coincidir para garantizar que los puntos de corte no sean demasiado liberales). Generalmente hago esto definiendo el consejo para hacer una devolución de llamada a un método en el objetivo de prueba, estableciendo un indicador, luego afirmo que se estableció el indicador.
Para probar el consejo es más complicado. Tiendo a delegar todo el cuerpo de consejos en un método normal, luego me concentro en probar el método en lugar del consejo.
Si ha hecho eso, la única parte que falta es que su consejo se aplica a los puntos correctos y realmente llama a los métodos. Si le preocupa que esto pueda ser un problema, puede hacerlo creando otro aspecto que coincida con su ejecución de aviso y establezca un indicador para mostrar que el método delegado esperado fue invocado por el aspecto y anule el método para no hacer nada.
¿Puedes darnos más detalles? – Javatar
Creo que es normal crear una prueba de semi integración cuando tanta lógica se genera en tiempo de ejecución. – Gepsens
Así que llama a un método que debe invocar los métodos de aspecto, pero nunca respondió cómo verificar que se están invocando los métodos de aspecto. @Javatar Creo que ese es el detalle que estás buscando? Supongo que su aspecto de ejemplo siempre arroja una ApplicationSecurityException? ¿Qué pasa con una invocación de método legítimo? – Jorge