我使用PHPUnit运行我的PHP单元测试。当数据提供程序未能加载时,会出现警告而非失败。
在PHPUnit 4版本之前,当数据提供程序无法加载时,PHPUnit输出中将显示失败信息。从PHPUnit 5开始,会发出警告。这对于使用脚本运行测试(例如在持续集成中)时很有问题,因为我看不到结果。
另一个区别是在使用PHP 5和PHP 7运行代码时的表现不同。在使用PHP 5运行测试时,我不会看到PHPUnit输出,而是会立即收到PHP致命错误。而在PHP 7上运行时,只有当PHPUnit到达失败的测试时才显示失败/警告。这让我相信这与PHPUnit设置的错误处理程序有关,可以捕获PHP7抛出但PHP5没有的错误。
以下是我的PHP代码:
这是运行PHPUnit 4的结果:
PHPUnit 4的结果符合我的期望,我想知道是否有方法能够让PHPUnit 5及以上版本的行为与之相同?
在PHPUnit 4版本之前,当数据提供程序无法加载时,PHPUnit输出中将显示失败信息。从PHPUnit 5开始,会发出警告。这对于使用脚本运行测试(例如在持续集成中)时很有问题,因为我看不到结果。
另一个区别是在使用PHP 5和PHP 7运行代码时的表现不同。在使用PHP 5运行测试时,我不会看到PHPUnit输出,而是会立即收到PHP致命错误。而在PHP 7上运行时,只有当PHPUnit到达失败的测试时才显示失败/警告。这让我相信这与PHPUnit设置的错误处理程序有关,可以捕获PHP7抛出但PHP5没有的错误。
以下是我的PHP代码:
class TestTest extends PHPUnit_Extensions_Database_TestCase
{
/**
* @dataProvider provider_sample
*/
public function test_sample($foo)
{
$this->assertString($foo);
}
public function provider_sample()
{
return [
[ClassName::string] // no such class, this should fail
];
}
public function getDataset()
{
return new ArrayDataSet([]);
}
}
这是运行PHPUnit 4的结果:
PHPUnit 4.8.36 by Sebastian Bergmann and contributors.
Runtime: PHP 7.2.5
Configuration: /home/some-path/phpunit.xml
Warning: The Xdebug extension is not loaded
No code coverage will be generated.
F
Time: 120 ms, Memory: 14.00MB
There was 1 failure:
1) Warning
The data provider specified for TestTest::test_sample is invalid.
Class 'ClassName' not found
FAILURES!
Tests: 1, Assertions: 0, Failures: 1.
以下是使用PHPUnit 5运行相同代码的结果:
PHPUnit 5.7.21 by Sebastian Bergmann and contributors.
Runtime: PHP 7.2.5
Configuration: /home/some-path/phpunit.xml
Error: No code coverage driver is available
W 1 / 1 (100%)
Time: 99 ms, Memory: 14.00MB
There was 1 warning:
1) Warning
The data provider specified for TestTest::test_sample is invalid.
Class 'ClassName' not found
WARNINGS!
Tests: 1, Assertions: 0, Warnings: 1.
PHPUnit 4的结果符合我的期望,我想知道是否有方法能够让PHPUnit 5及以上版本的行为与之相同?
$this->fail()
或$this->assertTrue(false)
来手动失败测试,但我不确定它们是否可以在数据提供程序方法中工作。 您可以尝试使用$this->assertTrue(class_exists('ClassName', true))
。 - HuyPHPUnit_Framework_Warning
。PHPUnit并不建议更改它,@sebastian-bergmann对此非常坚定:https://github.com/sebastianbergmann/phpunit/issues/2228#issuecomment-336609090 - ob-ivan