如何将数据传递给phpunit测试方法?

时间:2017-08-03 11:33:27

标签: php phpunit

我正在编写接受参数的phpunit测试用例方法。

我的代码如下

class myTestCase extends PHPUnit_Framework_TestCase
{
    public function testMyCase($date){

        $resultSet=$this->query("select * from testCase where date='$date'");
        $this->assertTrue($resultSet,True);
    }
}

我正试图从linux终端运行上面的测试用例。

phpunit --filter testMyCase myTestCase.php

但不知道如何传递参数。请帮忙。

谢谢。

3 个答案:

答案 0 :(得分:2)

首先,您应该使用最新版本的PHPUnit(v6.x)。 PHPUnit_Framework_TestCase的存在使它看起来像是在使用旧版本。但我离题了......

您需要数据提供者。

class myTestCase extends PHPUnit_Framework_TestCase
{
    /**
    * @dataProvider providerTestMyCase
    **/

    public function testMyCase($date, $expectedRowCount) {

        $sql  = "select * from testCase where date = '$date'";
        $stmt = self::$pdo->prepare($sql);
        $result = $stmt->execute($sql);

        //We expect the query will always work.
        $this->assertTrue($result);

        //We are expecting the rowcount will be consistent with the expected rowcounts.
        $this->assertSame($expectedRowCount,$stmt->rowCount());
    }

    public funtion providerTestMyCase() {
        return [ [ '2017-08-01' , 76 ]
               , [ '2017-08-02' , 63 ]
               , [ '2017-08-03' , 49 ]
               , [ '2017-08-04' , 31 ]
               , [ '2017-08-05' , 95 ]
               ]
    }
}

阅读并重新阅读:Database Testing以及@dataProvider

答案 1 :(得分:0)

也许你不需要它。

class myTestCase extends PHPUnit_Framework_TestCase
{
    public function testMyCases()
    {
        $dates = [
            '2017-01-01 00:00:00',
            '2017-08-03 15:00:00'
        ];

        foreach ($dates as $date) {
            $resultSet = $this->query("select * from testCase where date='$date'");
            $this->assertTrue($resultSet, true);
        }

    }
}

答案 2 :(得分:-1)

您的测试方法依赖于$date。您可以为其提供数据提供者(如前面的答案中所述),或者使其依赖于另一个返回日期的测试方法。

...

function testDateDependency()
{
    $date = '...';
    $this->assertInternalType('string', $date, 'dependency check');

    return $date;
}

/**
 * @depends testDateDependency
 */
function testMyCase($date) {

    ...

这是两个选项(第二个是数据提供者,它可能更好,因为你可以更容易地提供更多不同的依赖值)我知道。 PHPUnit文档可能会显示更多选项。