根据Lumen 5.3文档:
使用迁移
一种选择是在每次测试后回滚数据库并进行迁移 在下次测试之前。 Lumen提供了一个简单的DatabaseMigrations特性 这将自动为您处理。只需使用特征即可 你的考试班:
<?php use Laravel\Lumen\Testing\DatabaseMigrations; use Laravel\Lumen\Testing\DatabaseTransactions; class ExampleTest extends TestCase { use DatabaseMigrations; /** * A basic functional test example. * * @return void */ public function testBasicExample() { $this->get('/foo'); } }
使用交易
另一种选择是将每个测试用例包装在数据库事务中。 同样,Lumen提供了方便的DatabaseTransactions特性 将自动处理:
<?php use Laravel\Lumen\Testing\DatabaseMigrations; use Laravel\Lumen\Testing\DatabaseTransactions; class ExampleTest extends TestCase { use DatabaseTransactions; /** * A basic functional test example. * * @return void */ public function testBasicExample() { $this->get('/foo'); } }
正如您所看到的,解释文本几乎完全相同,代码示例完全相同,但特性使用除外。所以我很清楚,差异完全在于框架处理测试的方式。
这些做法有何不同?你何时更喜欢一个?
如果一个区别与数据库驱动程序有关,我使用的是MYSQL。
答案 0 :(得分:4)
DatabaseMigrations
迁移数据库,然后在测试完成时回滚数据库。
DatabaseTransactions
使用交易。从数据库中插入的任何数据都将在测试后回滚。
两者之间的区别是DatabaseMigrations
使用迁移(迁移数据库迁移,然后在测试后将其回滚),而DatabaseTransactions
使用事务(从数据库插入的数据被回滚)
答案 1 :(得分:0)
SQL中的事务使您可以回滚INSERTion,使用COMMIT提交您必须显式执行的插入。
这使您能够在不改变数据库本身的情况下进行单元测试。
迁移也是如此,但它们不会让您控制每一笔交易。