在编写方面时,如何测试它们是否匹配以及在我需要时调用它们?
我在用着 @Aspect
Spring 2.5.6的声明。
我不关心功能,否则提取和测试。
在编写方面时,如何测试它们是否匹配以及在我需要时调用它们?
我在用着 @Aspect
Spring 2.5.6的声明。
我不关心功能,否则提取和测试。
这里要测试三种不同的东西:
要测试切入点,您可以定义一些与预期“真实”目标具有相同包/类型/方法签名的测试类型,然后针对切入点定义测试建议以确保它们匹配(还定义了一些不应该的类型)匹配以确保切入点不太自由)。我通常通过定义建议来对测试目标中的方法进行回调,设置标志,然后断言标志已设置。
测试建议比较棘手。我倾向于将所有建议体委托给普通方法,然后专注于测试方法而不是建议。
如果您已经这样做了,唯一缺少的部分是您的建议应用于正确的切入点并实际调用方法。如果你担心这可能是一个问题,你可以通过创建来做到这一点 另一个 与您的通知执行匹配的方面,并设置一个标志以显示方面调用的预期委托方法,并覆盖该方法以不执行任何操作。
我最终通过以下方式创建了一些集成测试的东西:
创建了一个Spring感知的JUnit测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "aspects-test.xml" })
public class SomeAspectTest {
}
为此测试创建了弹簧配置:
声明应该由方面拾取的bean
<aop:aspectj-autoproxy />
<bean class="SomeAspect">
<property name="userDetailsSource">
<bean class="StubUserDetailsSource"/>
</property>
</bean>
<bean class="DummyService"/>
在单元测试中,我检索虚拟服务并调用其方法
@Autowired
private DummyService _dummyService;
@Test(expected = ApplicationSecurityException.class)
public void adminOnlyFails() throws ApplicationSecurityException {
_dummyService.adminOnly();
}
这里要测试三种不同的东西:
要测试切入点,您可以定义一些与预期“真实”目标具有相同包/类型/方法签名的测试类型,然后针对切入点定义测试建议以确保它们匹配(还定义了一些不应该的类型)匹配以确保切入点不太自由)。我通常通过定义建议来对测试目标中的方法进行回调,设置标志,然后断言标志已设置。
测试建议比较棘手。我倾向于将所有建议体委托给普通方法,然后专注于测试方法而不是建议。
如果您已经这样做了,唯一缺少的部分是您的建议应用于正确的切入点并实际调用方法。如果你担心这可能是一个问题,你可以通过创建来做到这一点 另一个 与您的通知执行匹配的方面,并设置一个标志以显示方面调用的预期委托方法,并覆盖该方法以不执行任何操作。
我最终通过以下方式创建了一些集成测试的东西:
创建了一个Spring感知的JUnit测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "aspects-test.xml" })
public class SomeAspectTest {
}
为此测试创建了弹簧配置:
声明应该由方面拾取的bean
<aop:aspectj-autoproxy />
<bean class="SomeAspect">
<property name="userDetailsSource">
<bean class="StubUserDetailsSource"/>
</property>
</bean>
<bean class="DummyService"/>
在单元测试中,我检索虚拟服务并调用其方法
@Autowired
private DummyService _dummyService;
@Test(expected = ApplicationSecurityException.class)
public void adminOnlyFails() throws ApplicationSecurityException {
_dummyService.adminOnly();
}