согласно 5.3 документации Lumen:В чем разница между миграциями баз данных и транзакциями при модульном тестировании в Lumen?
Использование Миграции
Один вариант заключается в откатить базу данных после каждого теста и перенести его до следующего испытания. 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.
Таким образом, было бы целесообразным компромиссное заключение о том, что Миграции более безопасны, но медленнее, а транзакции быстрее, но технически работают над живыми данными, а затем доверяют, что транзакции смогут быть отброшены в конце? –