单元测试时保证数据库整洁

对于我来说,写单元测试希望测试时生成的数据不会污染到数据库。那么在测试后就希望生成的数据能 rollback。这样下一个单元测试就能保证使用的数据没有污染。

下面是基于 Laravel phpunit Test,首先重写 setUp 方法

function setUp() {
    parent::setUp();
    DB::beginTransaction();
}

然后重写 tearDown 方法

function tearDown() {
    DB::rollBack();
}

这样就能保证运行每个单元测试时数据的一致了。

update: 原来文档中提到 Using Transactions. 感谢 @TimJuly 提醒。

use DatabaseTransactions;
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6
xcaptain

很聪明的做法,我以前都是在setUp中insert然后在tearDown中delete。

7年前 评论
liyu001989

如果利用好laravel的依赖注入和mock,可以不依赖数据库进行单元测试

7年前 评论

如果mysql的表有的是MyISAM的呢

7年前 评论
TimJuly

一看就是不好好看文档

use DatabaseTransactions;
7年前 评论
TimJuly

@klom303 除非整个数据库从备份进行还原,否则是不能保证对数据库完全无影响的,就算 InnoDB,他的 AUTO_INCREMENT 其实也变了,对于强迫症来说也是不可接受的.

7年前 评论

@TimJuly 我就有这样的强迫症:sun_with_face:

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!