在另一个类中使用语句

时间:2016-02-16 09:36:01

标签: php laravel phpunit

我正在阅读Laracast教程,建议我在我的测试类定义中包含 use DatabaseTransactions; 语句,以允许我的测试用例中的数据更改仅在该情况下保留。 我有一个测试课,

    Class MyClassTest extends TestCase
    {

    // This use statement is responsible for 
    //all the data operations to persists only with in that test case
    use DatabaseTransactions;
     /**
     * @test
     */  
     public function my_test_function()
    {
     // My test case code. Which inserts/updates 
     //data and assert statement.
    }
    }

use DatabaseTransactions的工作方式是方法中的数据更改仅保留在其中。它究竟如何运作?

1 个答案:

答案 0 :(得分:0)

进一步说,DatabaseTransactions是特征,其中包含带beginDatabaseTransaction注释的方法@before

  • 在测试类中使用use DatabaseTransactions可让该类具有该方法。
  • 由于方法beginDatabaseTransaction包含@before注释,因此将在每个测试用例之前执行。
  • 以下是在测试用例结束之前开始事务并回滚现有事务的方法定义(在测试用例结束之前,仍然不清楚为什么应该调用@before)。

    @Before

    public function beginDatabaseTransaction() {

    $this->app->make('db')->beginTransaction();
    
    $this->beforeApplicationDestroyed(function () {
        $this->app->make('db')->rollBack();
    });
    

    }