22-Spring5 整合JUnit4或JUnit5

为了形成对比, 先展示一下之前junit的测试类
MyTest

package com.limi.test;
import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;
import com.limi.dao.AccountDaoImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyTest {

    @Test
    public void test1(){

        //1.加载配置类
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        //2.获取配置的对象, 参数1:bean的id值, 参数2: 类名.class
        AccountDao accountDao = context.getBean("accountDaoImpl", AccountDaoImpl.class);

        //3.使用对象
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}


可以看到需要手动写代码加载配置类、获取实例对象, 很麻烦.

1.整合JUnit4

第一步 引入相关测试依赖
在这里插入图片描述
第二步 编写测试类
JTest4

package com.limi.test;

import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;
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;

@RunWith(SpringJUnit4ClassRunner.class) //选择单元测试框架
@ContextConfiguration(classes = SpringConfig.class) //加载配置文件
public class JTest4 {

    @Autowired
    private AccountDao accountDao;

    @Test
    public void test(){
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}

在这里插入图片描述

可以看到
(1)@ContextConfiguration(classes = SpringConfig.class) 代替了之前手动写代码
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
载入配置类

(2) @Autowired
private AccountDao accountDao;
代替了 AccountDao accountDao = context.getBean(“accountDaoImpl”, AccountDaoImpl.class);
方便了许多

小知识:ContextConfiguration的参数

//1.加载xml配置文件,classpath就是src目录
@ContextConfiguration(locations = "classpath:bean1.xml") 

//2.加载配置类文件
@ContextConfiguration(classes = SpringConfig.class)

//3.加载多个配置文件
@ContextConfiguration(classes = {SpringConfig1.class, SpringConfig2.class, SpringConfig3.class})
	//或
@ContextConfiguration(locations = {"classpath:bean1.xml", "classpath:bean2.xml", "classpath:bean3.xml"})

//4.不写参数, 则默认按照@ContextConfiguration()所标注在的类的类名寻找配置文件
@ContextConfiguration()

2.整合JUnit5

第一步 引入相关测试依赖
在这里插入图片描述
第二步 编写测试类

package com.limi.test;

import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class) //选择单元测试框架
@ContextConfiguration(classes = SpringConfig.class) //加载配置文件
public class JTest5 {

    @Autowired
    private AccountDao accountDao;

    @Test
    public void test(){
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}

注意选择Junit5
在这里插入图片描述

在这里插入图片描述
小知识:可以使用一个复合注解替代上面两个注解完成整合
@SpringJUnitConfig(locations = "classpath:bean1.xml")

package com.limi.test;

import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig(classes = SpringConfig.class)
public class JTest5 {

    @Autowired
    private AccountDao accountDao;

    @Test
    public void test(){
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}

效果一样
在这里插入图片描述

3.项目代码

数据库表t_account
在这里插入图片描述
在这里插入图片描述
项目结构
在这里插入图片描述
配置类SpringConfig

package com.limi.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;


@Configuration //配置类, 代替xml配置文件
@ComponentScan(basePackages = "com.limi") //组件扫描
public class SpringConfig {

    //创建数据库连接池
    //@Bean注解写在方法上面, 用于将方法的返回值加入到IOC容器中
    @Bean
    public DruidDataSource getDruidDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/db_springtest");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
    //创建 JdbcTemplate 对象, 参数dataSource会自动从IOC容器中寻找并注入
    @Bean
    public JdbcTemplate getJdbcTemplate(DataSource dataSource) {
        //到 ioc 容器中根据类型找到 dataSource
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //注入 dataSource
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

}


Account

package com.limi.entity;

public class Account {

    private Integer id;

    private String userName;

    private Double money;

    public Account(Integer id, String userName, Double money) {
        this.id = id;
        this.userName = userName;
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", money=" + money +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }
}

AccountDao

package com.limi.dao;

public interface AccountDao {
    //根据id查询账户余额
    double getMoneyById(Integer id);
}

AccountDaoImpl

package com.limi.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class AccountDaoImpl implements  AccountDao{

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public double getMoneyById(Integer id) {
        String sql = "select money from t_account where id = ?";
        double money = jdbcTemplate.queryForObject(sql,Double.class, id);
        return money;
    }
}

测试类MyTest

package com.limi.test;
import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;
import com.limi.dao.AccountDaoImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyTest {

    @Test
    public void test1(){

        //1.加载配置类
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        //2.获取配置的对象, 参数1:bean的id值, 参数2: 类名.class
        AccountDao accountDao = context.getBean("accountDaoImpl", AccountDaoImpl.class);

        //3.使用对象
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}


测试类JTest4

package com.limi.test;

import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;
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;

@RunWith(SpringJUnit4ClassRunner.class) //选择单元测试框架
@ContextConfiguration(classes = SpringConfig.class) //加载配置文件
public class JTest4 {

    @Autowired
    private AccountDao accountDao;

    @Test
    public void test(){
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}

测试类JTest5

package com.limi.test;

import com.limi.config.SpringConfig;
import com.limi.dao.AccountDao;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig(classes = SpringConfig.class)
public class JTest5 {

    @Autowired
    private AccountDao accountDao;

    @Test
    public void test(){
        System.out.println("money="+accountDao.getMoneyById(1));
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值