Junit 在SpringJava配置文件中创建方面bean会导致另一个bean不能自动连接

Junit 在SpringJava配置文件中创建方面bean会导致另一个bean不能自动连接,junit,mockito,spring-aop,spring-java-config,Junit,Mockito,Spring Aop,Spring Java Config,在尝试测试Spring AOP类时遇到了一个奇怪的问题 这里有一个类似的设置,因为我无法在这里输入实际代码 测试等级: @RunWith(SpringJUnit4ClassRunner.class) @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) @ContextConfiguration(classes = {MyTestConfiguration.class}) public class MyTest {

在尝试测试Spring AOP类时遇到了一个奇怪的问题

这里有一个类似的设置,因为我无法在这里输入实际代码

测试等级:

@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@ContextConfiguration(classes = {MyTestConfiguration.class})
public class MyTest {

    @Autowired
    private MyService1 myService1;

    @Autowired
    private MyService2 myService2;


    @Test
    public void testAop() {
        myService1.methodToBeIntercepted();
        verify(myService2).create();
    }
}
Spring Java配置文件:

@EnableAspectJAutoProxy
@Configuration
public class MyTestConfiguration {
    @Bean
    public MyService1 myService1() {
        return new MyService1Impl();
    }

    @Bean
    public MyService2 myService2() {
        return Mockito.mock(MyService2.class);
    }
}
AOP等级:

@Aspect
@Component
public class MyAop {
    @Autowired
    private MyService2 myService2;

    @Around("execution(* package.MyService1.methodToBeIntercepted(..))")
    public void interception(ProceedingJoinPoint joinPoint) {

       // do stuff

       MyReturn myReturn = (MyReturn) joinPoint.proceed();

       myService2.create();
    }
}
在这个设置中,我得到一个错误,说测试需要1次执行myService2.create,但是没有。这意味着AOP类没有正确地拦截调用,并且Spring配置是正确的,因为找到了所有bean

接下来,我将以下内容添加到MyTestConfiguration中,以创建AOP类的bean:

@Bean
public MyAop myAop() {
    return new MyAop();
}
现在我得到了一个Spring错误,说它找不到MyService1bean,所以测试永远不会运行。现在,只需将myaopbean添加到MyTestConfiguration中,就会导致Spring不再识别myservice1bean


我是否做错了什么?如果是,那是什么?

在第一个场景中,您会遇到哪些错误?如何在非模拟对象上调用verify?这是我的错。我在配置文件中将MyService2更改为mock。我首先收到的错误是从未调用模拟服务。