Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免在测试期间调用spring AOP方面_Java_Spring_Junit_Mockito_Spring Aop - Fatal编程技术网

Java 如何避免在测试期间调用spring AOP方面

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

我需要避免在对类进行单元测试时调用方面

我正在使用Java8、Spring4.3.22.RELEASE和mockito。我有一个@服务和它的单元测试。我还有一个@Aspect,它在服务中的方法上定义了一个切入点,当我运行我的应用程序时,它工作正常。问题是,当我运行单元测试时,由于方面中缺少依赖项,调用了方面并引发了NullPointerException

服务类别:

@服务
公共类联络服务{
@自动连线
公共非接触服务(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
注入其中,而不是您现在使用的真实方面。