2017-11-14 14 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

확실하지 않은 문제는 correclty를 이해했습니다. 그러나 관심이 여러 기대 데이터 세트를 편리하게 처리하는 것이라면 [배열 데이터 세트] (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 

여기에는 몇 가지 장점이 있습니다. 첫째, 외부 데이터 파일을 사용할 필요가 없으며 테스트 옆에 데이터를 보관할 수 있습니다. 둘째, 이것은 더 단순하고 이해하기 쉽습니다.