2017-11-14 6 views
0

私はデータベーステーブルをデータでシードし、ビルドしているライブラリを使っていくつかの操作を行い、最終的に期待値の別のデータセットに対してそれらのテーブルをテストします。私はyamlファイルを使用しています。PHPUnitデータベーステスト:テストごとにデータセットを使用するには?

これまでのところ、私はこれが、このコードでの作業を取得することができます

/* ... */ 

public function getDataSet() { 
    return new \PHPUnit_Extensions_Database_DataSet_YamlDataSet('path/to/yaml/data'); 
} 

/* ... */ 

public function testFoo() { 
    // setup state and run operations 

    // load expected data to test against 
    $expected = new \PHPUnit_Extensions_Database_DataSet_YamlDataSet('path/to/expected/yaml'); 
    static::assertTablesEqual($expected->getTable('foo'), $this-getConnection()->createDataSet('foo')); 
} 

私はちょうど

// fooSeedData.yml 
foo: 
    - id: 1 
    # ... 


// fooExpectedData.yml 
foo_test1: 
# ... 

foo_test2: 
# ... 

// fooTest.php 
public function foo_test1() { 
    /* ... */ 
    $expected->getTable('foo_test1') 
    /* ... */ 
} 

public function foo_test2() { 
    /* ... */ 
    $expected->getTable('foo_test2') 
    /* ... */ 
} 

を行うことができるようにしたいと思いますがstatic::assertTablesEqual($expected, $actual);は、データと一緒にテーブル名を比較します。テストごとにデータセットファイルが必要です。多数のデータセットファイルを持つことは過度に思われ、私は何か間違ったことをしていると思います。

これを行う方法はありますか?私はphpunit/dbunitを間違って使用していますか?もしそうなら、私はこれをどのようにしなければなりませんか?どんな助けもありがとう!

+1

私はこの問題を理解していませんか。しかし、複数の期待値データセットの便利な取り扱いについては、[配列データセット](https://github.com/sebastianbergmann/dbunit/blob/m aster/src/DataSet/Ar rayDataSet)を使用することを検討してください。 .php)を実際のデータに対して[クエリテーブル](https://phpunit.de/manual/current/en/database.html#database.asserting-the-result-of-a-query)と一緒に使用します。配列データセットは作成が簡単で、保守が簡単なので、通常、テストごとのデータセットを作成するのに完全に適合します。 – xmike

答えて

0

@ xmikeの推奨に従って配列データセットを使用してしまいました。

$expected = new \PHPUnit_Extensions_Database_DataSet_ArrayDataSet([ 
    'table' => [ 
    ['column' => 'value'] // row 
    ] 
]) 

static::assertTablesEqual(/* ... */) // run tests against array dataset 

これには2つの利点があります。まず、外部データファイルを使用する必要はなく、テストの隣にデータを保存することができます。第二に、これはちょうど簡単で理解しやすい方法です。

関連する問題