2016-11-21 5 views
2

私のコードの動作を理解していません。phpunitでの特性TestCase

私はテストがあります:

class EditVoterTest extends TestCase 
{ 
    use ContainerAwareTrait; 

    protected function setUp() 
    { 
     $this->getContainer(); 
    } 

    public function testSomething() 
    { 
     // test lauched 4 times with a provider 
    } 
} 

とトレイト:

trait ContainerAwareTrait 
{ 
    private $container; 

    public function getContainer() 
    { 
     if (!$this->container) { 
      echo "NO CONTAINER \n"; 
      $this->container = true; 
     } 

     return $this->container; 
    } 
} 

をし、コンテナが構築」であるのはなぜ結果が

PHPUnit 5.6.2 by Sebastian Bergmann and contributors. 

.NO CONTAINER 
.NO CONTAINER 
.NO CONTAINER 
.                4/4 (100%)NO CONTAINER 


Time: 241 ms, Memory: 21.00MB 

で簡単なバージョンがあります" 毎回 ?

+0

私はすべてのテストのために、テストクラスの新しいインスタンスが作成されている、と思います。 –

+1

各テストでPHPUnitは 'setUp()'を実行します –

+0

@FelippeDuarteが述べたように、 'setUp'はテストを実行する前に必要なことをすべて行うためのメソッドです(オブジェクトのインスタンス化、リソースへの接続など)。したがって、単体テスト手段のように、各テストは一意であるとみなされる必要があるため、各テストに対して 'setUp'を実行する必要があります。 –

答えて

0

ドキュメントによると、各テストの前にsetUp()が呼び出されます。 それは通常の行動であり、形質には関係しません。 これを試してください:あなたはデータプロバイダにそのメソッドを使用する場合

public static function setUpBeforeClass() 
{ 
    $this->getContainer(); 
    echo "it's called once a class"; 
} 

protected function setUp() 
{ 
    $this->getContainer(); 
    echo "it's called before each test"; 
} 

形質の本当の違いが始まります。 コンストラクタの前にデータプロバイダがロードされているため、メソッドが不明であるというエラーが発生する可能性があります。 これはを失敗します。

class EditVoterTest extends TestCase 
{ 
    use ContainerAwareTrait; 

    /** 
    * @dataProvider getData 
    */ 
    public function testSomething() 
    { 
     // test something 
    } 

    public function getData() 
    { 
     return $this->getContainer(); 
    } 
} 
関連する問題