如何将PHPUnit与TestCaseTrait一起使用
我是单元测试的新手。我阅读并尝试做同样的事情 首先,我有下一个环境:如何将PHPUnit与TestCaseTrait一起使用,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我是单元测试的新手。我阅读并尝试做同样的事情 首先,我有下一个环境: $ 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
$ 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"
},
...
我有/src、/tests和/vendor目录。作曲家自动加载器作品完美
我的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/phpunit.xml
以及测试:
$ 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
$cat tests/SimpleTest.php
$phpunit--testdox--verbose--configuration=tests/phpunit.xml tests/SimpleTest.php
由塞巴斯蒂安·伯格曼和贡献者编写的PHPUnit 6.0.6。
运行时:PHP7.0.15-1+deb.sury.org~trusty+1
配置:/home/ubuntu/workspace/tests/phpunit.xml
简单的
[x] 第一个例子
[]第二个例子
一切正常,并按预期工作,直到我取消注释行usetestcasetracit代码>。从现在起,测试就不起作用了。
它们甚至没有在测试函数中执行(我通过添加下一个代码进行检查:fwrite(STDERR,'Here we's!')
)
问题是:使用TestCaseTracit有什么问题代码>语句?为什么它打破了整个测试?我怎样才能解决它
谢谢大家!!
对我的英语很抱歉
结论:
这很奇怪,但问题出在setUp()
函数中。你必须在测试中添加它!当我这么做的时候,我的测试变得正常了
结论:这很奇怪,但问题出在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
方法实现为受保护的函数getConnection(){}
通过声明setUp
您刚刚覆盖了调用$this->getConnection()
的testcasetracit::setUp
,这就是它现在工作的原因。不确定这是否是您的问题,但查看表明getConnection
和getDataSet
应该返回一些内容。在你的例子中它们是无效的。我当然试过了。这些函数返回$this->createDefaultDBConnection($pdo,'test')
和新的MyApp\u DbUnit\u ArrayDataSet(数组(…)
(如文档中所示)。但这不会改变任何事情……没错。请告诉我,你是怎么得到这些日志的?它们对解决问题非常有帮助。@GHopper我用命令行执行了测试,这些错误都是在输出中出现的。如何执行您的测试?phpunit--testdox--verbose--configuration=tests/phpunit.xml tests/SimpleTest.php