Я новичок в модульном тестировании. Я прочитал documentation и попытаюсь сделать то же самое.Как использовать PHPUnit с TestCaseTrait
Прежде всего, у меня есть следующая среда:
$ php -v
PHP 7.0.15-1+deb.sury.org~trusty+1 (cli) (built: Jan 20 2017 09:16:11) (NTS)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.15-1+deb.sury.org~trusty+1, Copyright (c) 1999-2017, by Zend Technologies
$ cat composer.json
...
"require-dev": {
"phpunit/phpunit": "^6.0",
"phpunit/dbunit": "^3.0"
},
...
У меня есть/ЦСИ/тесты и/поставщика каталогов. Автозагрузчик композиторов работает отлично.
Мой PHP-проект тесно связан с базой данных MySQL, и все, что я хочу, это модульное тестирование этих функций.
$ cat tests/phpunit.xml
<phpunit>
<php>
<ini name="display_errors" value="On" />
<ini name="display_startup_errors" value="On" />
</php>
</phpunit>
И тест:
$ cat tests/SimpleTest.php
<?php
use PHPUnit\Framework\TestCase;
use PHPUnit\DbUnit\TestCaseTrait;
require_once(__DIR__.'/../vendor/autoload.php');
class SimpleTest extends TestCase
{
// use TestCaseTrait;
protected function getConnection() {}
protected function getDataSet() {}
public function testFirstExample()
{
$this->assertEquals(1, 1);
}
public function testSecondExample()
{
$this->assertEquals(1, 0);
}
}
?>
$ phpunit --testdox --verbose --configuration=tests/phpunit.xml tests/SimpleTest.php
PHPUnit 6.0.6 by Sebastian Bergmann and contributors.
Runtime: PHP 7.0.15-1+deb.sury.org~trusty+1
Configuration: /home/ubuntu/workspace/tests/phpunit.xml
Simple
[x] First example
[ ] Second example
Все отлично и работает, как и ожидалось, пока я не раскомментировать строку use TestCaseTrait;
. С этого момента тесты не работают. Они даже не выполняются (я проверил его, добавив следующий код: fwrite(STDERR, 'Here we are!')
) внутри тестовых функций.
Вопрос: что не так с сообщением use TestCaseTrait;
? Почему он нарушил весь тест? Как я могу это решить?
Спасибо! P.S. Извините за мой английский.
Вывод: Это странно, но проблема была в setUp()
функции. Вы должны добавить его в тест! Когда я это сделал, мой тест стал работоспособным ...
Не уверен, что это ваша проблема, но, глядя на [phpunit doc] (https://phpunit.de/manual/current/en/database.html), указывает, что 'getConnection' и' getDataSet' должны что-то возвращать. В вашем примере они недействительны. – k0pernikus
Конечно, я попробовал. Эти функции возвращают '$ this-> createDefaultDBConnection ($ pdo, 'test');' и 'new MyApp_DbUnit_ArrayDataSet (массив (...))' соответственно (как в документации). Но это ничего не меняет ... – GHopper