Spring Boot单元测试踩过的坑

测试

在编写单元测试的时候 Spring不需要介入(随便一提:单元测试难道是用方法就能测试??)

但是在集成测试要用到Spring 就像下面一个例子 如果生产应用程序使用了Spring来配置并组装组件 那么测试就需要用它来配置并组装那些组件

Spring的SpringJUnit4ClassRunner可以在基于JUnit的应用程序测试里加载Spring应用程序上下文

Springboot集成测试

要想加载完整的Spring boot Springboot应用程序最终是由
SpringApplication加载的 它可以显示加载 在这里也可以使用SpringBootSercletInitializer
SpringApplication不仅加载应用程序上下文 还会开启日志 加载外部属性(application.properties)以及其他SpringBoot特性

如果我们要测试Mybatis中的某个mapper
按照常规的做法 要获取sqlsession 但是springboot将配置文件给"省略"了
常规方法就不好获取了

可以使用Springboot的测试类

注意:

  1. 该写法适用于2.2以下的版本博主亲测2.1.8有效
  2. 注意测试类的 包名 要和主启动类一致

@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter16ApplicationTests{
    @Test
    public void contextLoads(){

    }
}

注解@RunWith载入的类SpringRunner是Spring结合Junit的运行器
所以进行JUint测试 @SpringBootTest是可以配置Spring Boot的相关功能

public class Chapter16ApplicationTests{
    //注入用户服务类
    @Autowired
    private UserService userService=null;
    @Test
    public void contextLoads(){
        User user=userService.getUser();
        //....

        //使用断言判断用户信息是否为空
        Assert.assertNotNull(user);
    }
}  

如果包名一致还是错误
以下写法省略了@RunWith(SpringRunner.class)也能成功注入 是因为博主使用的Spring BOOT是2.2.4

@SpringBootTest
class DemoApplicationTests {

    /**
     * 将mysql中的date返回java中的date
     */
    @Autowired
    ArticleMapper articleMapper;

    @Test
    void contextLoads() {
        System.out.println(articleMapper);

        List<String> list=articleMapper.getCategories((long) 7);
        System.out.println(
                Arrays.toString(list.toArray())
        );
    }

}

//上诉代码执行完毕

//注入的内容永远是空

//articleMapper为空


理论上来说 低于2.2.x版本的应该不支持集成测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值