单元测试时保证数据库整洁
对于我来说,写单元测试希望测试时生成的数据不会污染到数据库。那么在测试后就希望生成的数据能 rollback。这样下一个单元测试就能保证使用的数据没有污染。
下面是基于 Laravel phpunit Test,首先重写 setUp 方法
function setUp() {
parent::setUp();
DB::beginTransaction();
}
然后重写 tearDown 方法
function tearDown() {
DB::rollBack();
}
这样就能保证运行每个单元测试时数据的一致了。
update: 原来文档中提到 Using Transactions. 感谢 @TimJuly 提醒。
use DatabaseTransactions;
关于 LearnKu
很聪明的做法,我以前都是在setUp中insert然后在tearDown中delete。
如果利用好laravel的依赖注入和mock,可以不依赖数据库进行单元测试
如果mysql的表有的是MyISAM的呢
一看就是不好好看文档
@klom303 除非整个数据库从备份进行还原,否则是不能保证对数据库完全无影响的,就算 InnoDB,他的 AUTO_INCREMENT 其实也变了,对于强迫症来说也是不可接受的.
@TimJuly 我就有这样的强迫症:sun_with_face: