2016-11-25 3 views
0

ルーメンでのユニットテスト中にデータベースの移行とトランザクションの違いは何ですか?ルーメン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'); 
    } 
} 

取引

別のオプションは、データベーストランザクション内のすべてのテストケースをラップすることですを使用しました。あなたは説明テキストがほぼ同じである見ることができるとのコード例では、特性の利用を除き、まったく同じであるので

<?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'); 
    } 
} 

: は再び、ルーメンは便利DatabaseTransactionsが はこれを自動的に処理する、という形質を提供します。したがって、この違いは、フレームワークがテストを処理する方法に完全に含まれていることは明らかです。

これらの機能はどのように異なるのですか。

1つの違いがデータベースドライバと関係する場合は、私はMYSQLを使用しています。

答えて

2

DatabaseMigrationsは、テストの実行時にデータベースを移行し、テストが終了したらデータベースをロールバックします。

DatabaseTransactionsはトランザクションを使用します。データベースから挿入されたデータは、テスト後にロールバックされます。

2つの違いはDatabaseMigrationsDatabaseTransactionsは、トランザクション(データベースから挿入されたデータはロールバックされている)を使用している間の移行は、(テスト後に戻ってそれをロール、あなたのデータベースの移行を移行)を使用している

出典:https://mattstauffer.co/blog/better-integration-testing-in-laravel-5.1-databasemigrations-databasetransactions-and-withoutmiddleware

+1

したがって、移行の安全性は向上しますが、移行はより安全ですが遅くなり、トランザクションは高速ですが、実際には実データで作業し、最後にトランザクションをロールバックできることを信頼することになります。 –

0

SQLのトランザクションでは、INSERTをロールバックして、明示的にCOMMITを使用して挿入する必要があります。

これにより、データベース自体を変更せずに単体テストを行うことができます。

移行は同じですが、すべての単一のトランザクションを管理することはありません。

関連する問題