8

現在、ライブラリの単体テストを作成しています。データからビジネス ロジックをリファクタリングした後、ロジックをテストする方法について少し混乱しています。

たとえば、データの配列が渡される非常に複雑なプロセスがあります。これにはデータ プロバイダーを使用して、あらゆる種類のケースで確実に機能するようにします。

データ プロバイダーを介して渡す予定のデータで、期待される結果も渡す必要がありますか? または、これはテストで計算する必要があります。

前述のように、計算のプロセスは非常に複雑なプロセスであり、完全ではありません$a + $b

4

2 に答える 2

8

Steven の例を拡張するために、各データ セットに名前を付けると役立つ場合があります。失敗すると、PHPUnit は失敗メッセージに「データ #0」ではなくその名前を表示します。

public static function GetRemoteAddressFromWebServerDataProvider()
{
    return array(
        'not forwarded' => array('127.0.0.1',  NULL,           '127.0.0.1'),
        'no remote address' => array('127.0.0.1',  '127.0.0.1',    NULL),
    );
}
于 2012-10-12T19:30:44.293 に答える
7

データプロバイダーでは、期待される結果も提供します。メソッドが入力を受け取り、値を返すようにしたいので、実装の1つにエラーがある可能性があるため、計算を2回実装したくありません。

問題のメソッド/関数を実際にテストしているので、モックを使用するつもりはありません。

4つのパラメーターに基づいて何かを計算している場合、データプロバイダーは5を渡します。最初のパラメーターは期待される結果であり、その後にメソッド/関数に渡されるパラメーターが続きます。

このことから、私の電話は非常に簡単です。

public static function GetRemoteAddressFromWebServerDataProvider()
{
    return array(
        array('127.0.0.1',  NULL,           '127.0.0.1'),
        array('127.0.0.1',  '127.0.0.1',    NULL),
        );
}

/**
 * @dataProvider GetRemoteAddressFromWebServerDataProvider
 */
public function testGetRemoteAddressFromWebServer($Result, $HTTPXSetting, $RemoteAddress)
{
    $_SERVER['HTTP_X_FORWARDED_FOR'] = $HTTPXSetting;
    $_SERVER['REMOTE_ADDR']          = $RemoteAddress;
    $this->assertEquals($Result, GetRemoteAddressFromWebServer());
}
于 2012-10-11T15:00:29.140 に答える