2

次のようなPHPUnitテストがあります。

/**
 * @dataProvider provideSomeStuff
 */
public function testSomething($a, $b, $c)
{
    ...
}

/**
 * @dataProvider provideSomeStuff
 * @depends testSomething
 */
public function testSomethingElse($a, $b, $c)
{
    ...
}

/**
 * @depends testSomething
 */
public function testMoreStuff()
{
    ...
}

// Several more tests with the exact same setup as testMoreStuff

成功しても、testSomethingそれに依存するすべてのテストはスキップされます。PHPUnit マニュアルのいくつかの注記は、テストがデータ プロバイダーを使用する他のテストに依存する可能性があることを示しています。

注:
テストが @dataProvider メソッドと、それが依存する 1 つ以上のテストの両方から入力を受け取る場合、データ プロバイダーからの引数は、依存するテストからの引数の前に来ます。

メモ
テストがデータ プロバイダーを使用するテストに依存している場合、依存するテストが少なくとも 1 つのデータ セットに対して成功すると、依存するテストが実行されます。データ プロバイダーを使用するテストの結果は、依存するテストに注入できません。

したがって、すべてのテストをスキップする理由がわかりません。私は何時間もこれに苦労してきました、誰かが私を助けてください。上記の疑似コードから問題を導き出せない場合の完全なテスト コードを次に示します。

テスト結果のスクリーンショット:

試験結果

4

2 に答える 2

2

これはphpunit3.4.5のバグのようですが、phpunit3.4.12で修正されています。

以下は、マニュアルの例に基づいた最小限の例です。PHPUnit 3.4.5でも同じ動作が得られますが、PHPUnit3.6.11では4つのパスが得られます。絞り込むと、phpunit 3.4の変更ログには、PHPUnit3.4.12で修正されたことが示されています。

class DataTest extends PHPUnit_Framework_TestCase
{

/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}


/**
* @depends testAdd
*/
public function testAddAgain()
{
$this->assertEquals(5,3+2);
}

/** */
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
);
}

}
于 2012-06-17T03:32:07.170 に答える