使用了spring的容器来管理Bean之后, 测试时我们发现每一次都要去获取app对象, 用app对象再去获取bean对象, 是比较麻烦的
也就是测试类的每一个测试方法都要写获取测试对象的代码
spring的设计者也发现了这一点, 所以spring中集成了junit.
上述问题的解决方法:
让每个测试类都有拥有spring容器, 测试对象就可以作为属性注入进测试类, 以供测试类中的测试方法使用。让springJunit负责创建spring容器,只需要将spring的核心配置文件告诉springJunit,

第一步:
在项目中导入junit的坐标和spring集成junit的坐标
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<!--spring集成junit的jar包-->
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
spring集成的这个junit可以十分方便的测试所有在容器中的bean实例
首先认识两个注解
一个是RunWith
一个叫ContextConfiguration

代码实例
@RunWith(SpringJUnit4ClassRunner.class) //表示方法不再直接使用junit包了, 而是使用spring集成的junit
@ContextConfiguration(classes = {SpringConfiguration.class}) //加载核心配置类
public class SpringJunitTest {
//十分方便的
//需要测试哪一个bean就作为属性, 配合spring的注解注入容器中的bean
@Autowired
@Qualifier("userDaoMysql")
private UserDao userDao1;
@Autowired
@Qualifier("userDaoOrale")
private UserDao userDao2;
@Autowired
private UserService userService;
@Autowired
private DataSource dataSource;
@Test
public void testSpringBean() throws Exception{
userDao1.getUser();
userDao2.getUser();
userService.save();
System.out.println(dataSource.getConnection());
}
}
这是Mysql的实现方法
这是Orale的实现方法
这是Orale的实现方法
调用了持久层的方法
12月 16, 2021 5:46:23 下午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
com.mysql.jdbc.JDBC4Connection@5c44c582
注意点:
java.lang.ExceptionInInitializerError
这个异常的原因是, 由于jar包版本冲突导致的
也即是spring-test5.0.5对应junit4.12才对
本文介绍了如何通过Spring集成JUnit避免频繁获取Bean,提供了一种方法,即在测试类中注入Spring容器,使得测试更便捷。重点讲解了@RunWith(SpringJUnit4ClassRunner)和@ContextConfiguration的使用,以及解决jar包版本冲突的问题。
978

被折叠的 条评论
为什么被折叠?



