在前面的章节中,我们学习了如何使用配置文件的去创建表和初始化数据。在测试的时候,我们首先需要保项目的环境是启动的, 这样的话,我们才可以测试我们的数据。当应用连接数据库时,确保我们要使用的数据已经初始化了。在我们测试中,需要我们去刷新或更改数据。Sping让我们有能力去完成这项工作。

5.3.1代码实现

  1. 首先,我们在src/test目录下创建resources的目录。
  2. 这个目录下,我们创建一个新的文件test-data.sql在resources的文件下。文件的内容如下:

INSERT INTO author (id, first_name, last_name) VALUES (2, 'Greg',
'Turnquist')
INSERT INTO book (isbn, title, author_id, publisher_id) VALUES ('978-1-
78439-302-1', 'Learning Spring Boot', 2, 1)

  1. 接着,我们修改BooPubApplicationTests的文件:

public class BookPubApplicationTests {
...
@Autowired
private BookRepository repository;
@Autowired
private DataSource ds;
@Value("${local.server.port}")
private int port;
private MockMvc mockMvc;
private RestTemplate restTemplate = new TestRestTemplate();
private static boolean loadDataFixtures = true;
@Before
public void setupMockMvc() {
...
}
@Before
public void loadDataFixtures() {
if (loadDataFixtures) {
ResourceDatabasePopulator populator = new
ResourceDatabasePopulator(context.getResource("classpath:/testdata.sql"));
DatabasePopulatorUtils.execute(populator, ds);
loadDataFixtures = false;
}
}
@Test
public void contextLoads() {
assertEquals(2, repository.count());
} @
Test
public void webappBookIsbnApi() {
...
} @
Test
public void webappPublisherApi() throws Exception {
...
}
}

  1. 可以先测试一下,看看是否可行
  2. 让我们在src/test/resource的目录下创建data.sql的文件,并插入如下内容。注意的是,Spring会同时去执行main和test下的两份data.sql的文件。

INSERT INTO author (id, first_name, last_name) VALUES (3, 'William',
'Shakespeare')
INSERT INTO publisher (id, name) VALUES (2, 'Classical Books')
INSERT INTO book (isbn, title, author_id, publisher_id) VALUES ('978-1-
23456-789-1', 'Romeo and Juliet', 3, 2)

  1. 当我们加了另外一本书在数据库时,我们需要修改contextLoads()的测试方法如下:

assertEquals(3, repository.count());

  1. 执行测试类,是要以通过测试。
  2. 我们需要在src/test/resource目录下创建application.properties文件,内容如下:

spring.datasource.url =
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.jpa.hibernate.ddl-auto=none

需要注意的是,Spring Boot只会加载一份的applicaton.properties文件。当我们创建了application.properties在test/resource的目录下时,main/resource下的文件将不会被加载,也就是说,不会出现两份文件合并的情况。因此,我们刚刚test/resource的目录下创建了application.properties的文件中也需要加上spring.jpa.hibernate.dll-auto的配置声明。

5.3.2代码说明

这个章节中,我们依赖于上面实现的应用,让Spring去初始化或装配数据为了达到测试的目的。然而,我们只想要一些数据只用于我们测试当中。这样的情况下,我们可以去看一下ResourceDatabasePopulator和DatabasePopilatorUtils类,这两个类都是为了在我们测试前插入数据。这就好比Spring去扫描schema.sql和data.sql文件一样。下面我们来分步说明一下:

  1. 我们创建了一个loadDataFixtures()方法,这人方法加了@Before的注释去告知JUnit测试之前调用。
  2. 在这个方法中,我们包含了classpath:/test-data.sql文件路径,这个文件存入了我们要执行的SQL语句。同时代码中会自动加入@Autowired DataSource ds.
  3. 因为Spring自动依赖于一个实例类,和@Before注释会在每次测试时都加载一下,然而,我们需要避免出现重复加载数据的情况。为了达到这个目的,我们创建了static Boolean loadDataFixtures的参数,这个参数确保DatabasePopulatorUtils只执行一次。
  4. 在最后,我们为了将测试和项目中的application.properties的文件分开,我们在src/tes/resource下创建了一份新application.properties.
  5. 最后需要说明的是,application.propertis文件在项目中只会加载一次。但是Spring提供了大量的配置文件是可以结合使用的,也就是说在同名情况下,会将同名谁的信息进行合并。

5.3使用自定议的测试数据库文件相关推荐

  1. 【SqlServer】测试数据库文件

    或许很少人像我这么纠结,想做些数据库测试,但又因各种坑爹的原因不能用手头上的数据库.于是想网上有没有现成的公共数据库,可以随意使用,不会因为侵权承担任何责任.Google发现国外的开源数据比较多,因为 ...

  2. Mysql安装测试数据库employees

    Mysql安装测试数据库employees 1.下载employees测试数据库文件 2.Ubuntu环境安装 3.windows下安装 1.下载employees测试数据库文件 官网下载:emplo ...

  3. 软件测试中的程序接缝指什么,接缝滑移-定滑移量常用测试标准与方法

    接缝滑移-定滑移量常用测试标准与方法 已被阅读9264次 2018-12-21 织物接缝滑移,也就是之前国内所称的纰裂程度.是指织物经接缝后,缝纫处的纱线抵抗外在拉力的能力,是衡量织物接缝性能的一个重 ...

  4. SpringCloudGateway路由定义存至Mysql数据库

    SpringCloudGateway路由定义存至Mysql数据库 SpringCloudGateway默认根据配置文件或代码在启动时路由定义存在内存中,如果要修改路由配置,需要改动配置文件或代码后重启 ...

  5. php测试插入,php – 使用Symfony测试数据库插入

    今天是个好日子, 在过去的几天里,我一直在研究测试驱动开发,并决定我也需要学习它.虽然我无法弄清楚如何准确地做到这一点. 我的项目依赖于Symfony2.1.6框架和Doctrine,所以我有一些需要 ...

  6. 一次使用duplicate创建测试数据库的过程

    由于管理不善,测试机的环境和生产机的环境已经相差甚远了,于是一狠心重建测试机,重建的第一步,重建数据库,我采用rman的duplicate命令从生产数据库复制到测试数据库的方式,虽然过程不太顺利,还是 ...

  7. Python 测试驱动开发(五)测试数据库(上)

    保存用户输入:测试数据库 要获取用户输入的待办事项,发送给服务器,这样才能使用某种方式保存待办事项,然后再显示给用户查看. TDD的重要思想是必要时一次只做一件事.每次只做必要的操作,让功能测试向前迈 ...

  8. 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据

    目录标题 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据 步骤: 1.使用 Navicat 打开 ...

  9. benchmarksql测试mysql_使用benchmarkSQL测试数据库的TPCC

    压力测试是指在MySQL上线前,需要进行大量的压力测试,从而达到交付的标准.压力测试不仅可以测试MySQL服务的稳定性,还可以测试出MySQL和系统的瓶颈. TPCC测试:Transaction Pr ...

  10. 非功能测试-数据库awr报告分析

    目录 1.使用场景 2.常规分析 2.1确认问题 2.2解决问题 3.awr报告整体观看 1.使用场景 我们项目组在测试阶段,在测试非功能指标时,遇到一系列问题时,麻烦非功能老师帮忙从数据库导出的aw ...

最新文章

  1. python 函数复习
  2. 判断三点是顺时针还是逆时针方向
  3. Codeforces Round #299 (Div. 2) D. Tavas and Malekas kmp
  4. XPath 轴 Axes
  5. tomcat-1-初识
  6. Edraw Office Viewer 8.X Edraw Office Viewer
  7. ubuntu安装rabbitvcs
  8. codeforces920 C. Swap Adjacent Elements【连通块 + 前缀和】
  9. 佳能EOS 500D、尼康D5000、宾得Kx PK 纠结!
  10. Java整合ORC识别验证码
  11. Redis Cluster集群
  12. 里去频闪的插件叫什么_冬天去海南,你才会发现什么叫“不枉此生”!
  13. 打印选课学生名单(25)
  14. 如何给div加遮罩?
  15. 微软语音识别引擎Speech
  16. 中秋节的特别礼物----属于程序员的专有浪漫
  17. skywalking—docker镜像构建k8s部署
  18. 阿里拍卖 捡漏 一元起拍
  19. EPSON1100清零软件 在哪有?
  20. CodePush热更新常用命令与注意事项

热门文章

  1. Unity3d场景漫游---iTween实现
  2. ASP.NET 实践:锁定 ASP.NET 配置设定
  3. HCIE Security DS V-P-N 备考笔记(幕布)
  4. puppet详解(一)——puppet基础知识
  5. MySQL外键约束详解
  6. C++ 练习题(一:布尔表达式与真值表图文详解)
  7. 华三 h3c PBR策略配置
  8. CTF中文件与16进制互转及相关操作(Python3)
  9. NYOJ--218--Dinner(含题目意思)
  10. laravel 的用户认证