好处:自动创建好容器,无需测试者创建Spring容器。所有@Test共享这个容器,而无需每个@Test都需要创建容器
步骤:
@ContextConfiguration()注解有四种写法
Spring的单元测试
@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration("applicationContext.xml") // 当前包下查找配置文件
public class TestSpringContainer {
@Autowired // 自动装配 - 无需用户手动初始化、创建对象由Spring容器管理
User user;
@Test
public void test1() {
System.out.println(user.hashCode());
}
@Test
public void test2() {
System.out.println(user.hashCode());
}
}
利用Spring的内置测试工具进行 – 四种方式的调试
特别说明一下User1、2、3、4的类代码都是一样的,只是修改了类名而已
User - Bean类
public class User {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [name=" + name + "]";
}
}
Spring容器配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="top.linruchang.domain.User">bean>
<bean id="user2" factory-method="getUser2" class="top.linruchang.domain.User2Factory">bean>
<bean id="user3Factory" class="top.linruchang.domain.User3Factory" >bean>
<bean id="user3" class="top.linruchang.domain.User3" factory-bean="user3Factory" factory-method="getUser3">bean>
<bean id="user4" class="top.linruchang.domain.User4Factory">bean>
beans>
步骤
定义一个User Bean类
将上述User Bean全限定名配置在XML文件上 –
静态工厂方法类
public class User2Factory {
public static User2 getUser2() {
return new User2();
}
}
定义一个User Bean类、以及工厂类(里面包含能获取UserBean对象的成员方法)
工厂的实例化交给Spring容器管理:
定义UserBean对象由哪个工厂生成,以及调用的工厂方法:
工厂类
public class User3Factory {
public User3 getUser3() {
return new User3();
}
}
定义一个User Bean类、以及工厂类(实现FactoryBean所有方法即可)
配置文件设置为:
工厂类
public class User4Factory implements FactoryBean<User4> {
@Override
public User4 getObject() throws Exception {
return new User4();
}
@Override
public Class getObjectType() {
return User4.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
使用Spring内置的Junit测试工具
@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJunitTest {
@Autowired
User user;
@Autowired
User2 user2;
@Autowired
User3 user3;
@Autowired
User4 user4;
@Test
public void test() {
System.out.println(user);
System.out.println(user2);
System.out.println(user3);
System.out.println(user4);
}
}
` Spring容器配置文件添加一个扫描语句
<context:component-scan base-package="top.linruchang">context:component-scan>
Human - Bean源码
@Component
public class Human {
@Autowired //当Human实例化时,自动调用这个方法
public void setDept(Dept dept) {
System.out.println("dept注入成功:" + dept);
}
}
Dept - Bean源码
@Component
public class Dept {
String deptno;
String dname;
}
测试代码 - 看是否属性注入成功
@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration("applicationContext.xml")
public class DITest {
@Autowired // Spring容器帮你实例化
Human human;
@Test
public void test() {
System.out.println(human);
}
}