Java 如何避免在测试期间调用spring AOP方面
我需要避免在对类进行单元测试时调用方面 我正在使用Java8、Spring4.3.22.RELEASE和mockito。我有一个@服务和它的单元测试。我还有一个@Aspect,它在服务中的方法上定义了一个切入点,当我运行我的应用程序时,它工作正常。问题是,当我运行单元测试时,由于方面中缺少依赖项,调用了方面并引发了NullPointerException 服务类别:Java 如何避免在测试期间调用spring AOP方面,java,spring,junit,mockito,spring-aop,Java,Spring,Junit,Mockito,Spring Aop,我需要避免在对类进行单元测试时调用方面 我正在使用Java8、Spring4.3.22.RELEASE和mockito。我有一个@服务和它的单元测试。我还有一个@Aspect,它在服务中的方法上定义了一个切入点,当我运行我的应用程序时,它工作正常。问题是,当我运行单元测试时,由于方面中缺少依赖项,调用了方面并引发了NullPointerException 服务类别: @服务 公共类联络服务{ @自动连线 公共非接触服务(ContactDao ContactDao){ this.contactDa
@服务
公共类联络服务{
@自动连线
公共非接触服务(ContactDao ContactDao){
this.contactDao=contactDao;
}
公共布尔互斥呼叫(长联系人ID){
返回contactDao.muteCall(contactId);
}
}
服务测试:
公共类ContactServiceTest{
@嘲弄
私人联系人;
私人联络服务;
@以前
公共作废设置(){
initMocks(this);
contactService=新的contactService(contactDao);
}
@试验
公共void testMuteCall(){
联系人服务。静音呼叫(1L);
}
}
方面:
@面貌
公共类接触方面{
私人计量登记处;
公共无效设置注册表(计量注册表){
this.registry=注册表;
}
@返回后(pointcut=“execution(*com.company.ContactService.muteCall(..)”),返回=“retVal”)
public void checkReturnContactServiceMuteCall(JoinPoint、JoinPoint、boolean retVal){
对象[]args=joinPoint.getArgs();
registry.counter(“my.metric.mute_call”).increment();
}
}
应用程序上下文:
@配置
公共类应用程序上下文{
@豆子
公共计量登记计量登记(){
返回新的SimpleTerregistry();
}
@豆子
公共联系人方面联系人方面(){
ContactAspect=Aspects.aspectOf(ContactAspect.class);
setRegistry(meterRegistry());
回报方面;
}
}
我希望在运行测试时不会调用方面。当前,当我运行测试时,我得到一个NullPointerException,因为方面中没有定义注册表。最好的方法是使用Spring配置文件,它允许您有不同的运行方案 选中此项:
我猜您使用的是
SpringRunner
而不是MockitoJUnitRunner
。如果您的测试不需要spring
或aspectj
,只需使用它即可。您正在将方面配置为@Bean
,为什么您会对它的使用感到惊讶?您可以提供一个Spring测试配置来停用您不需要的方面。如果您想更接近于集成测试,您可以像现在一样保留方面,但只需将模拟的MeterRegistry
注入其中,而不是您现在使用的真实方面。