gpt4 book ai didi

java - 如何避免在测试期间调用 spring AOP 切面

转载 作者:行者123 更新时间:2023-11-30 12:02:54 25 4
gpt4 key购买 nike

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

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

服务类:

@Service
public class ContactService {

@Autowired
public InContactService(ContactDao contactDao) {
this.contactDao = contactDao;
}

public boolean muteCall(Long contactId) {
return contactDao.muteCall(contactId);
}
}

服务测试:

public class ContactServiceTest {

@Mock
private ContactDao contactDao;

private ContactService contactService;


@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
contactService = new ContactService(contactDao);
}

@Test
public void testMuteCall(){
contactService.muteCall(1L);
}
}

看点:


@Aspect
public class ContactAspect {

private MeterRegistry registry;

public void setRegistry(MeterRegistry registry) {
this.registry = registry;
}

@AfterReturning(pointcut = "execution(* com.company.ContactService.muteCall(..))", returning = "retVal")
public void checkReturnContactServiceMuteCall(JoinPoint joinPoint, boolean retVal) {
Object[] args = joinPoint.getArgs();

registry.counter("my.metric.mute_call").increment();
}
}

应用上下文:

@Configuration
public class ApplicationContext {

@Bean
public MeterRegistry meterRegistry() {
return new SimpleMeterRegistry();
}

@Bean
public ContactAspect contactAspect() {
ContactAspect aspect = Aspects.aspectOf(ContactAspect.class);
aspect.setRegistry(meterRegistry());
return aspect;
}
}

我预计在运行测试时不会调用方面。目前,我在运行测试时收到 NullPointerException,因为 registry 未在方面中定义。

最佳答案

最好的方法是使用 Spring 配置文件,它允许您有不同的运行方案。

检查这个: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

关于java - 如何避免在测试期间调用 spring AOP 切面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com