PHPUnit: проблема с dataProvider - PullRequest
       3

PHPUnit: проблема с dataProvider

3 голосов
/ 05 августа 2011

Что не так со следующим тестом:

<?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()),
        );
    }
}

?>

Сообщение об ошибке:

$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

Спасибо.

Ответы [ 4 ]

11 голосов
/ 24 февраля 2012

Я тоже немного поняла, я использовал метод __construct() для настройки внутренних переменных.

Вместо этого мне нужно было иметь function setUp() {}, где это произойдет.


Я только что снова решил эту проблему - но на этот раз проблема была в комментарии - я использовал:

/*
 * @dataProvider ....
 */

Но комментарий должен начинаться с /**, чтобы быть распознанным.

11 голосов
/ 05 августа 2011

Это потому, что ваш тест также выполняется как конструктор:

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

    // ...

}

Для совместимости с PHP4 вы можете использовать имя класса в качестве имени метода для объявления конструктора. Это также делается без учета регистра (т. Е. testSomething() считается конструктором TestSomething). Как правило, вы добавляете ключевое слово Test к имени вашего класса, чтобы этого не происходило (вместо предварительного добавления):

class SomethingTest extends PHPUnit_Framework_TestCase
{
    // ...
}
0 голосов
/ 11 октября 2017

Для будущих посетителей, прибывающих сюда, потому что phpunit запустил функцию провайдера данных в качестве теста и показал флаг «рискованный тест» с This test did not perform any assertions, кажется, что поскольку phpunit 6 (возможно 6.3?), Phpunit больше не игнорирует «тест» "префикс в функциях поставщика данных, например testAdditionProvider. Переименование его в additionProvider как в текущих документах работает. Хотя я не уверен на 100%.

0 голосов
/ 05 августа 2011

Если вы используете PHP до 5.3.3:

Вы даете переменные при создании класса?Потому что ваш класс и имя функции (TestSomething / testSomething) одинаковы (без учета регистра).Таким образом, он видит функцию testSomething как конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...