首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPUnit: dataProvider问题

PHPUnit: dataProvider问题
EN

Stack Overflow用户
提问于 2011-08-06 01:20:10
回答 4查看 5K关注 0票数 4

下面的测试有什么问题:

代码语言:javascript
复制
<?php

class TestSomething extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider provider
     */
    public function testSomething($array, $expectedResult)
    {
        $this->assertEquals($array, $expectedResult);
    }

    public function provider()
    {
        return array(
            array(array(), array()),
        );
    }
}

?>

错误消息:

代码语言:javascript
复制
$phpunit index.php
PHP Warning:  Missing argument 1 for TestSomething::testSomething() in /var/www/tests/something-test/index.php on line 8
PHP Warning:  Missing argument 2 for TestSomething::testSomething() in /var/www/tests/something-test/index.php on line 8
PHP Notice:  Undefined variable: array in /var/www/tests/something-test/index.php on line 11
PHP Notice:  Undefined variable: expectedResult in /var/www/tests/something-test/index.php on line 11
PHP Fatal error:  Uncaught exception 'PHPUnit_Framework_ExpectationFailedException' with message 'Failed asserting that 
Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)
 is equal to <string:testSomething>.' in /usr/share/php/PHPUnit/Framework/Constraint/IsEqual.php:164
Stack trace:
#0 /usr/share/php/PHPUnit/Framework/Assert.php(2087): PHPUnit_Framework_Constraint_IsEqual->fail(Array, '')
#1 /usr/share/php/PHPUnit/Framework/Assert.php(343): PHPUnit_Framework_Assert::assertThat(Array, Object(PHPUnit_Framework_Constraint_IsEqual), '')
#2 /var/www/tests/something-test/index.php(11): PHPUnit_Framework_Assert::assertEquals('testSomething', Array)
#3 /usr/share/php/PHPUnit/Framework/TestSuite.php(537): TestSomething->testSomething('testSomething', Array, 0)
#4 /usr/share/php/PHPUnit/Framework/TestSuite.php(816): PHPUnit_Framework_TestSuite::createTest(Object(ReflectionClass), 'testSomething')
#5 /usr/share/php/PHPUnit/Framework/TestSuite.php(224): PHPUnit_Framework_TestSuite->addTestMethod(Object(ReflectionClass), Object(Reflectio in /usr/share/php/PHPUnit/Framework/Constraint/IsEqual.php on line 164

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-06 01:58:00

这是因为您的测试也是作为构造函数执行的:

代码语言:javascript
复制
class TestSomething extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider provider
     */
    public function testSomething($array, $expectedResult)
    {
        $this->assertEquals($array, $expectedResult);
    }

    // ...

}

为了与PHP4兼容,您可以使用类名作为方法名来声明构造函数。它也是以不区分大小写的方式完成的(例如:testSomething()被认为是TestSomething的构造函数)。通常,您会将Test关键字附加到您的类名以防止这种情况发生(而不是前置):

代码语言:javascript
复制
class SomethingTest extends PHPUnit_Framework_TestCase
{
    // ...
}
票数 11
EN

Stack Overflow用户

发布于 2012-02-24 23:51:53

我也做过同样的事情,我使用__construct()方法来设置内部变量。

相反,我需要做的是有一个function setUp() {},在那里会发生这种情况。

我刚刚又遇到这个问题了,--但这一次的问题是我使用的评论:

代码语言:javascript
复制
/*
 * @dataProvider ....
 */

但这条评论必须以/**开头才能被认可。

票数 13
EN

Stack Overflow用户

发布于 2017-10-12 00:51:36

对于将来来到这里的人来说,因为phpunit将数据提供程序功能作为测试运行,并使用This test did not perform any assertions显示了“危险测试”标志,所以似乎自从phpunit 6(也许是6.3?)phpunit不再忽略数据提供者函数中的“测试”前缀,例如testAdditionProvider。将其重命名为additionProvider,就像在current docs works中一样。不过,我不是100%确定。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6960169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档