0

同じ引数(user_id)を取るメソッドはほとんどありません。これらのメソッドでは、渡された引数が有効な 8 つの数字の整数であることをテストします。渡された引数の検証をテストするためにテストをグループ化(?)する可能性はありますか?

Class Hello{
public function test($user_id=0){
 if (!preg_match('/^[0-9]{8}$/', $user_id)) return false;
do stuff...
}
public function make($user_id=0){
 if (!preg_match('/^[0-9]{8}$/', $user_id)) return false;
do stuff...
}
public function find($user_id=0){
 if (!preg_match('/^[0-9]{8}$/', $user_id)) return false;
do stuff...
}
}

およびテストファイル:

class HelloTest extends PHPUnit_Framework_TestCase {

//Looking for something simpler to replace that:
        // zwraca FALSE jesli dlugosc inna niz 8 znakow 
        $this->assertFalse(Hello::test('1'), 'Dlugosc user_id musi byc 8 znakow, nie 1.');
        $this->assertFalse(Hello::test(0), 'Dlugosc user_id musi byc 8 znakow, nie 1 (zero).');
        $this->assertFalse(Hello::test('7777777'), 'Dlugosc user_id musi byc 8 znakow, nie 7.');

        $this->assertFalse(Hello::make('1'), 'Dlugosc user_id musi byc 8 znakow, nie 1.');
        $this->assertFalse(Hello::make(0), 'Dlugosc user_id musi byc 8 znakow, nie 1 (zero).');
        $this->assertFalse(Hello::make('7777777'), 'Dlugosc user_id musi byc 8 znakow, nie 7.');

        $this->assertFalse(Hello::find('1'), 'Dlugosc user_id musi byc 8 znakow, nie 1.');
        $this->assertFalse(Hello::find(0), 'Dlugosc user_id musi byc 8 znakow, nie 1 (zero).');
        $this->assertFalse(Hello::find('7777777'), 'Dlugosc user_id musi byc 8 znakow, nie 7.');
}
4

1 に答える 1

1

PHPUnit マニュアルのデータ プロバイダーでは、データ プロバイダーを使用してテストに値を渡すことができます。これを行い、期待される応答値を含めます。

<?php
class HelloTest extends PHPUnit_Framework_TestCase
{
    public function UserIdDataProvider()
    {
        return array(
            array('1', FALSE, 'Dlugosc user_id musi byc 8 znakow, nie 1.'),
            array(0, FALSE, 'Dlugosc user_id musi byc 8 znakow, nie 1 (zero).'),
            array('7777777', FALSE, 'Dlugosc user_id musi byc 8 znakow, nie 7.'),
            array('88888888', TRUE, ''),
        );
    }

     /**
     * @dataProvider UserIdDataProvider
     */
    public function testUserIdTest($UserId, $Result, $Message)
    {
        $this->assertEquals($Result, Hello::test($UserId), $Message);
    }

    /**
     * @dataProvider UserIdDataProvider
     */
    public function testUserMake($UserId, $Result, $Message)
    {
        $this->assertEquals($Result, Hello::make($UserId), $Message);
    }

    /**
     * @dataProvider UserIdDataProvider
     */
    public function testUserIdFind($UserId, $Result, $Message)
    {
        $this->assertEquals($Result, Hello::find($UserId), $Message);
    }

}
?>
于 2013-07-23T17:26:30.713 に答える