Junit 在SpringJava配置文件中创建方面bean会导致另一个bean不能自动连接
在尝试测试Spring AOP类时遇到了一个奇怪的问题 这里有一个类似的设置,因为我无法在这里输入实际代码 测试等级: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 {
@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。我首先收到的错误是从未调用模拟服务。