main方法是所有应用程序的入口;
在junit测试单元中,没有main方法也能执行的原因是:junit集成了一个main方法该方法就会判断当前测试类中那些方法有@Test注解 junit就会让有Test注解的方法进行执行(也就是执行method.invoke()),junit不会去检索我们是否使用了spring框架,因此也就不会为我们读取配置文件/配置类创建spring核心容器
因此:当测试方法执行时,没有IOC容器,就算写了Autowired注解,也无法实现自动注入
package spring_study.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import spring_study.config.SpringConfiguration;
import spring_study.domain.User;
import spring_study.service.IUserService;
import java.util.List;
/**
* 使用Junit单元测试:测试我们的配置
* spring整合Junit的配置
* 1.导入spring整合junit的jar包
* <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.2.RELEASE</version>
<scope>compile</scope>
</dependency>
* 2.使用Junit提供的一个注解把原来的main方法替换,替换成Spring提供的
* @RunWith
* 3.告知spring的运行器,spring和ioc创建是基于xml还是注解的,并且说明位置
* @ContextConfiguration
* locations:指定xml文件的位置,加上classpath关键字,表示在类路径下
* classes:指定注解类所在的位置
* 当我们使用spring5.0版本的时候,要求Junit的jar必须是4.12及以上版本
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
public class TestJunit_And_Spring {
@Autowired
private IUserService userService = null;
@Test
public void test_(){
List<User> users = userService.findAll();
for(User user:users){
System.out.println(user);
}
}
}