7

入力と予想される出力を含むデータ ファイルがあります。例は次のとおりです。

input:   output:
2        3
3        5
4        Exception
5        8
...      ...

現在、データ ファイルから読み取り、各 {input,output} ペアのテストを実行するカスタム ソリューションがあります。これを PHPUnit ベースのソリューションに変換したいと思います。テスト名forXassertYを使用して、入力ごとに 1 つのテストを実行したいと考えています。したがって、最初の 3 つのテストは for2assert3()、for3assert5()、および for4assertException() と呼ばれます。

テスト メソッドを動的に作成し、データ ファイルをこれらのテストのベースとして保持できる場合は、既存のデータをテストに変換したくありません。後で他のテストを追加し、Hudson を使用して出力を処理および表示したいので、PHPUnit に変換したいと考えています。

提案?

4

2 に答える 2

13

これには、PHPUnitのデータプロバイダーを使用できます。

<?php

require_once 'PHPUnit/Framework/TestCase.php';

class ProviderTest extends PHPUnit_Framework_TestCase
{
    public function testCaseProvider()
    {
        // parse your data file however you want
        $data = array();
        foreach (file('test_data.txt') as $line) {
            $data[] = explode("\t", trim($line));
        }

        return $data;
    }

    /**
     * @dataProvider testCaseProvider
     */
    public function testAddition($num1, $num2, $expectedResult)
    {
        $this->assertEquals($expectedResult, $num1 + $num2);
    }
}

?>

test_data.txtファイルは次のようになります。

1   2   3
2   2   4
3   5   7

次に、テストを実行します。

$ phpunit ProviderTest.php
PHPUnit 3.4.12 by Sebastian Bergmann.

...F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

1) ProviderTest::testAddition with data set #2 ('3', '5', '7')
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-7
+8

/Users/dana/ProviderTest.php:23

FAILURES!
Tests: 4, Assertions: 3, Failures: 1.
于 2010-04-14T04:14:53.087 に答える
0

PHP ファイルは単なるテキスト ファイルなので、TestGenerator.php スクリプトを記述して、データ ファイルを読み取り、多数の .php テスト ファイルを出力することができます。Test Generator スクリプトは、「行を読み取り、解析し、PHP を吐き出す」という単純なものになります。次に、そのテスト ジェネレーター スクリプトをビルド/テスト実行プロセスの一部として実行するだけで、準備完了です。

于 2009-12-01T07:18:56.050 に答える