0

今日はPHPUnitを見つめています。私は Yii フレームワークを使用しているので、組み込み関数を使用しています。

誰かが私が正しく進んでいるかどうかを教えてもらえますか

モデル関数はこちら

public function getTaxRate()
{
    if($this->province_id != 13 && $this->province_id != 14)
    {
        return 21;
    }
    elseif($this->identification[0] == 'B')
    {
        return 0;       
    }
    else
    {
        return 7;       
    }

} 

ここにテストケースがあります

public function testgetTaxRate()
{
    $accountData = array(
                                array('identification'=>'x2', 'province_id'=>'50', 'result'=>21), // test for 21
                                array('identification'=>'x2', 'province_id'=>'13', 'result'=>7), // test for 7
                                array('identification'=>'B2', 'province_id'=>'13', 'result'=>0), // test for 0
                        );
    foreach($accountData as $account)
    {
        $acc = new Accounts();
        $acc->identification=$account['identification'];
        $acc->province_id=$account['province_id'];
        $tax = $acc->getTaxRate();
        $this->assertEquals($tax, $account['result']);
    }
}

私はこれを正しく行っていますか?結果は正しく、期待どおりにエラーが発生します。

よろしく

4

1 に答える 1

0

テストを編成するための適切なルールがあります。1 つのケースに 1 つのテストです。ロジックが 1 つしかない場合は、PHPUnitコードの重複を避けるために、この目的のためにデータ プロバイダー メカニズム ( によって提供される) を使用する必要があります。

ドキュメント: http://phpunit.de/manual/3.7/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers

そしてあなたのための例:

/**
 * @dataProvider dataProvider_getTaxRate
 */
public function testGetTaxRate($id, $provinceId, $expectedResult)
{
    $acc = new Accounts();
    $acc->identification = $id;
    $acc->province_id = $provinceId;

    $this->assertEquals($expectedResult, $acc->getTaxRate());
}

public static function dataProvider_getTaxRate()
{
    return array(
        array('x2', '50', 21),
        array('x2', '13', 7),
        array('x2', '14', 7),
        array('B2', '13', 0),
    );
}

もう 1 つ、アサーションの最初の引数に期待値を入れるのは良い習慣です。

于 2013-09-20T12:49:39.223 に答える