phpunit with / laravel:使用提供程序时缺少参数

时间:2014-07-29 17:43:12

标签: php unit-testing laravel phpunit provider

我正在使用Laravel运行PHPUnit。这是我的测试:

class UserTest extends TestCase {

public function testSluggifyReturnsSluggifiedString($originalString, $expectedResult)
{
    $url = new User();
    $result = $url->sluggify($originalString);

    $this->assertEquals($expectedResult, $result);

}
public function providerTestSluggifyReturnsSluggifiedString()
{
    return array(
        array('This string will be sluggified', 'this-string-will-be-sluggified'),
        array('THIS STRING WILL BE SLUGGIFIED', 'this-string-will-be-sluggified'),
        array('This1 string2 will3 be 44 sluggified10', 'this1-string2-will3-be-44-sluggified10'),
        array('This! @string#$ %$will ()be "sluggified', 'this-string-will-be-sluggified'),
        array("Tänk efter nu – förr'n vi föser dig bort", 'tank-efter-nu-forrn-vi-foser-dig-bort'),
        array('', '')
    );
}

}

由于我熟悉单元测试,我只是将sluggify()函数添加到User类的底部。

我收到此错误:

There was 1 error:

1) UserTest::testSluggifyReturnsSluggifiedString
ErrorException: Missing argument 1 for UserTest::testSluggifyReturnsSluggifiedString()

如果我更改测试以定义两个参数(public function testSluggifyReturnsSluggifiedString($originalString='test', $expectedResult='test')),测试运行正常。由于某种原因,它不是在读取提供者数据。

我怀疑这是关于Laravel设置的内容,但我在文档中找不到任何指示我正确方向的内容。我做错了什么?

1 个答案:

答案 0 :(得分:0)

来自Data Provider上的PHPUnit文档:

  

要使用的数据提供程序方法是使用@dataProvider批注指定的。

因此,您必须在测试方法的基础上添加注释,例如:

class UserTest extends TestCase {

    /**
     * @dataProvider providerTestSluggifyReturnsSluggifiedString
     */
    public function testSluggifyReturnsSluggifiedString($originalString, $expectedResult)
    {
        // ...
    }

    public function providerTestSluggifyReturnsSluggifiedString()
    {
        // ...
    }
}