SpringBoot+Mybatis框架项目的单元测试和集成测试(下)
来源:互联网 发布:收费软件 编辑:程序博客网 时间:2024/05/22 13:02
集成测试
集成测试需要启动服务,并且连接数据库,因此配置这一块要做到位。本人之前没有接触过SpringBoot集成测试,故踩了以下3个大坑,希望分享给大家!
问题1:SpringBoot的自动装配、yml文件都无法导入
在测试过程中,发现如果只是添加:@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"application.yml"})@DirtiesContext
就进行测试,是会识别不了yml属性配置文件的,而且还会报“第一行有无法识别的字符”的错误,应当按照下面来:
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest( classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)@DirtiesContext
在这个里面,我们发现了@SpringBootTest的注解,它是用来进行SpringBoot项目的测试的,其中:
classes = Application.class,
这个不是必须加上的,你也可以对这个测试类进行打包,放到package下面,这样他也能够识别到Application这个SpringBoot的启动项。
而@DirtiesContext:如果某个测试方法确实会破坏 Spring 容器上下文,你可以显式地为该测试方法添加 @DirtiesContext 注解,以便 Spring TestContext 在测试该方法后刷新 Spring 容器的上下文。问题2:数据源配置有问题
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency> <artifactId>tomcat-jdbc</artifactId> <groupId>org.apache.tomcat</groupId></dependency>
在mybatis-Spring-boot-starter中是默认jdbc作为数据源的!
而之前的pom中忘记引入tomcat-jdbc这个依赖项了,所以找不到数据源!
在分库中,就会用到这个原理!
多个数据源之间进行切换。@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true)static class Tomcat extends DataSourceConfiguration { @Bean @ConfigurationProperties("spring.datasource.tomcat") public org.apache.tomcat.jdbc.pool.DataSource dataSource( DataSourceProperties properties) { org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource( properties, org.apache.tomcat.jdbc.pool.DataSource.class); DatabaseDriver databaseDriver = DatabaseDriver .fromJdbcUrl(properties.determineUrl()); String validationQuery = databaseDriver.getValidationQuery(); if (validationQuery != null) { dataSource.setTestOnBorrow(true); dataSource.setValidationQuery(validationQuery); } return dataSource; }}
以上代码是Spring-Boot-autoconfigure jar包中的DataSourceConfiguration.java配置文件,他专门用来识别各种数据源。其中,`@ConfigurationOnProperty()`表示没有匹配上这个数据源,就会去加载下面这个数据源的配置。而`@ConditionalOnClass()`表示需要opg.apache.tomcat.jdbc.pool.DataSource.class类,才会去加载这个数据源!
问题3:测试Controller必须要通过@Autowired注入
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest( classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)@DirtiesContextpublic class dataOpTest { private TBookController tBookController = new TBookController(); public TBookMapper tBookMapper; @Test public void testIfExistByName(){ String bk_name = "c++"; int existCount = tBookController.ifExist(bk_name); Assert.assertEquals(existCount, 1); }}
这样单纯的去new一个controller,只会报空指针异常,只有:
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest( classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)@DirtiesContextpublic class dataOpTest { @AutoWired private TBookController tBookController = new TBookController(); public TBookMapper tBookMapper; @Test public void testIfExistByName(){ String bk_name = "c++"; int existCount = tBookController.ifExist(bk_name); Assert.assertEquals(existCount, 1); }}
@Autowired才会将controller需要加载的各个bean都装在进来!
- SpringBoot+Mybatis框架项目的单元测试和集成测试(下)
- SpringBoot+MyBatis框架的项目单元测试+集成测试(上)
- 基于SpringBoot框架的单元测试和集成测试的区别和联系
- SpringBoot集成MyBatis框架
- SpringBoot框架下基于Junit的单元测试
- 单元测试和集成测试
- SpringBoot+Maven项目实战(4):集成Mybatis
- 关于SpringBoot框架下的service层单元测试问题(mockito)
- Spring 单元测试和集成测试
- 单元测试,集成测试,系统测试 的区别和联系
- 单元测试.集成测试,系统测试 的联系和区别
- 集成测试单元测试.系统测试,的联系和区别
- SpringBoot和MyBatis集成案例(学习笔记)
- 关于单元测试和集成测试的新的理解
- 软件测试技术---单元测试和集成测试
- 单元测试、集成测试和功能测试
- Spring MVC的单元测试和集成测试(不使用mock)
- Spring MVC的单元测试和集成测试(不使用mock)
- css基本选择器,id选择器,class选择器,标签选择器,*通配符选择器,逗号 空格 + >
- HTML5按比例缩略图片并上传的实例
- java编程加载窗口,制作动画(屏保泡泡)
- 设计模式-原型模式
- 欢迎使用CSDN-markdown编辑器
- SpringBoot+Mybatis框架项目的单元测试和集成测试(下)
- 【知乎答案】2018校招,笔试应该怎么准备?|牛客网回答
- Centos Android开发环境配置-Android Tools -android list sdk --extended --all
- PL/SQL破解方法(不需要注册码)
- Spark 学习入门教程
- 电子邮件礼仪(E-Mail Etiquette)
- 对于UBUNTU系统中修改了某个文件无法进入到系统界面的解决步骤演示
- 8月英语
- android Arrays.fill()的使用