整合Junit的代码如下所示:
BookDao:
测试程序:
通过自动装配把扫描到的含有bean注解的对象装配到bookdao引用属性中
测试结果:
补充错误1:
刚才测试程序中的@SpringBootTest注解不包含@SpringBootApplication扫描bean注解的,但是值得让我们思考了:为什么测试程序中没有扫描bean 的注解但是可以获取到含有bean注解的对象BookDao呢?
因此总结一句话:
其实运行测试程序类的时候,扫描获取含有bean注解对象是上面的测序类当中的@SpringBootApplication注解完成的,而不是测试程序中完成的,测试程序中压根就没有扫描含有bean注解的注解,但是测试程序中之所以能自动装配获取到含有bean注解的对象,就是上面的测序类当中的注解完成的,
因此测试程序所在的包名等级必须平等于程序类所在的包名或者低于程序类所在的包名等级(如程序类所在包名等级为:com.Bivin,那么测试程序类只能是:com.Bivin或者com.Bivin.等),因为只有低于程序类的包名了,当运行测试程序的时候,才会先执行到程序类当中的扫描含有bean注解对象的注解,才会先知道哦原来扫描到的bean是BookDao对象,最后在知道扫描到的bean是谁后运行测试程序了才能知道自动装配就装配刚才程序类扫描到的BookDao对象,高于程序类的包名的话就会报错(因为还不知道扫描的bean是谁呢 就运行测试程序类了【虽然我们运行的是测试程序,但我们可以理解为程序类和程序程序类一起跑的,就能知道为什么包名有级别了】)
报错信息如下所示:
如果就想让测序程序类所在的包名高于程序类所在的包名的话(并且不报错):
解决方法如下所示:
classes = Springboot03JunitApplication.class