2017-02-18 29 views
0

Я новичок в модульном тестировании. Я прочитал 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() функции. Вы должны добавить его в тест! Когда я это сделал, мой тест стал работоспособным ...

+0

Не уверен, что это ваша проблема, но, глядя на [phpunit doc] (https://phpunit.de/manual/current/en/database.html), указывает, что 'getConnection' и' getDataSet' должны что-то возвращать. В вашем примере они недействительны. – k0pernikus

+0

Конечно, я попробовал. Эти функции возвращают '$ this-> createDefaultDBConnection ($ pdo, 'test');' и 'new MyApp_DbUnit_ArrayDataSet (массив (...))' соответственно (как в документации). Но это ничего не меняет ... – GHopper

ответ

0

Заключение: Это странно, но проблема была в функции setUp(). Вы должны добавить его в тест! Когда я сделал это, мой тест стал работать правильно

Это не странно, посмотрите на журналы

1) SimpleTest::testFirstExample 
TypeError: Argument 1 passed to PHPUnit\DbUnit\DefaultTester::__construct() must be an instance of PHPUnit\DbUnit\Database\Connection, null given, called in /x/vendor/phpunit/dbunit/src/TestCaseTrait.php on line 102 

2) SimpleTest::testSecondExample 
TypeError: Argument 1 passed to PHPUnit\DbUnit\DefaultTester::__construct() must be an instance of PHPUnit\DbUnit\Database\Connection, null given, called in /x/vendor/phpunit/dbunit/src/TestCaseTrait.php on line 102 

А что об этой линии?

# TestCaseTrait::102 
return new DefaultTester($this->getConnection()); 

Результат $this->getConnection() является null, потому что вы реализовали getConnection метод как protected function getConnection() {}.

Объявив setUp, вы просто переопределили TestCaseTrait::setUp, который вызывает $this->getConnection(), поэтому он работает сейчас.

+0

Правильно. Скажите, пожалуйста, как вы получили эти журналы? Они очень полезны при решении проблем. – GHopper

+0

@GHopper Я выполнил тесты с командной строкой, и эти ошибки были на выходе. Как вы выполняете тесты на ур? –

+0

'$ phpunit --testdox --verbose --configuration = tests/phpunit.xml тесты/SimpleTest.php' – GHopper

 Смежные вопросы

  • Нет связанных вопросов^_^