10
A
回答
7
我结束了创建一些东西,是一个有点集成测试,以下列方式:
创建一个Spring的JUnit测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "aspects-test.xml" })
public class SomeAspectTest {
}
创造了这个测试,弹簧的配置:
- 启用@AspectJ用法;
- 配置我的虚拟依赖方面
声明应由方面
<aop:aspectj-autoproxy /> <bean class="SomeAspect"> <property name="userDetailsSource"> <bean class="StubUserDetailsSource"/> </property> </bean> <bean class="DummyService"/>
拾起在单元测试中检索到的虚拟服务,并调用其方法的Bean
@Autowired
private DummyService _dummyService;
@Test(expected = ApplicationSecurityException.class)
public void adminOnlyFails() throws ApplicationSecurityException {
_dummyService.adminOnly();
}
8
有三种不同的东西在这里进行测试:
- 是你的切入点符合你的期望?
- 你的建议是否引用了正确的切入点?
- 建议是否按照您的预期行事?
要测试切入点,您可以定义一些与预期的“真实”目标具有相同包/类型/方法签名的测试类型,然后针对切入点定义测试建议以确保它们匹配(还定义一些不应该匹配的类型以确保切入点不是太自由)。我通常通过定义建议对测试目标中的方法进行回调,设置标志,然后声明标志已设置来实现此目的。
要测试建议是棘手的。我倾向于将所有的建议主体委托给一个正常的方法,然后专注于测试方法而不是建议。
如果你已经这样做了,唯一缺少的部分是你的建议被应用到正确的切入点并实际调用方法。如果您担心这可能是一个问题,您可以通过创建另一个方面来匹配您的建议执行,并设置一个标志以显示该方面调用的预期委托方法,并重写该方法以便不执行任何操作。
相关问题
- 1. 单元测试Spring @Around AOP方法
- 2. Spring AOP - 无法执行方面
- 3. Spring AOP方面注释日志记录
- 4. 如何调试Spring AOP的
- 5. Spring AOP方面的日志消息方面启动
- 6. 如何单元测试AOP?
- 7. BeanNotOfRequiredTypeException与Spring AOP
- 8. Spring aop with struts2
- 9. Spring AOP和ClassNotFoundException:org.springframework.core.convert.converter.ConvertingComparator
- 10. Spring-AOP和SLF4J
- 11. Spring AOP - @AfterThrowing
- 12. Spring Security和AOP
- 13. Spring Roo和AOP
- 14. Spring Boot AOP
- 15. TestNG和Spring AOP
- 16. Spring AOP - 正确配置重试建议
- 17. 为什么我的Spring AOP方面在我的单元测试中工作,但不是我的webapp?
- 18. AOP在弹簧方面的警告
- 19. 如何实例化spring bean,而不从aop引用:方面
- 20. 在线程中没有触发Spring AOP方面
- 21. Spring 4 AOP方面永远不会被调用?
- 22. Spring AOP的 - 方法调用()不发生
- 23. 使用Spring AOP获取方法参数?
- 24. AOP切入点匹配Spring Step.execute(...)方法
- 25. Spring AOP的表达
- 26. Spring Security AOP错误
- 27. Spring AOP的代理
- 28. Spring AOP + MVVM Foundation + PropertyChanged
- 29. Spring AOP的错误
- 30. Spring AOP的VS Aspecj
你能给出更多细节吗? – Javatar 2012-04-20 06:44:50
我认为创建半集成测试是正常的,因为如此多的逻辑实际上是运行时生成的。 – Gepsens 2012-09-10 13:07:24
所以你调用一个应该调用方面方法的方法,但是你从来没有回答如何验证方法方法被调用。 @Javatar我认为这就是你正在寻找的细节?我猜你的示例方面总是抛出一个ApplicationSecurityException?那么合法的方法调用呢? – Jorge 2013-09-05 21:08:24