您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
phpunit中filter的使用(匹配命名空间、类、方法以及数从数据集选择测试数据)
发布时间:2021-09-16 21:50:22编辑:雪饮阅读()
基于我们前面所学习的数据集也就是数据供给器的知识,那么我们可以有如下的一个用命名数据集提供的测试用例:TestCaseClass.php:
<?php declare(strict_types=1);
//use PHPUnit\Framework\TestCase;
namespace TestNamespace;
use PHPUnit\Framework\TestCase;
class TestCaseClass extends TestCase
{
/**
* @dataProvider provider
*/
public function testMethod($data)
{
$this->assertTrue($data);
}
public function provider()
{
return [
'my named data' => [true],
'my data' => [true],
'my data2' => [false],
'my dog' => [false],
'my cat' => [true]
];
}
}
//use PHPUnit\Framework\TestCase;
namespace TestNamespace;
use PHPUnit\Framework\TestCase;
class TestCaseClass extends TestCase
{
/**
* @dataProvider provider
*/
public function testMethod($data)
{
$this->assertTrue($data);
}
public function provider()
{
return [
'my named data' => [true],
'my data' => [true],
'my data2' => [false],
'my dog' => [false],
'my cat' => [true]
];
}
}
如果直接运行:
C:\Users\Administrator>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
..FF. 5 / 5 (100%)
Time: 00:00.006, Memory: 20.00 MB
There were 2 failures:
1) TestNamespace\TestCaseClass::testMethod with data set "my data2" (false)
Failed asserting that false is true.
C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php:12
2) TestNamespace\TestCaseClass::testMethod with data set "my dog" (false)
Failed asserting that false is true.
C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php:12
FAILURES!
Tests: 5, Assertions: 5, Failures: 2.
那么可以看到总共有条数据进行测试,测试结果也是有对的有错的。
那么我们知道这些测试数据中” my named data”这条数据断言为true是正确的,那么假如我就只想单独测试” my named data”这条数据的断言,假定我不知道” my named data”这个断言是否成功,其它的数据我不测,我只测” my named data”这条数据。则有运行如:
C:\Users\Administrator>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar --filter 'TestNamespace\\TestCaseClass::testMethod.*"my named data"' C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 00:00.004, Memory: 20.00 MB
OK (1 test, 1 assertion)
可以看到这次测试断言都成功,且只有一个测试。
那么我们还可以看到数据中”my data”也是true,按理来说它应该也能断言成功,那么实际上:
C:\Users\Administrator>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar --filter 'TestNamespace\\TestCaseClass::testMethod.*"my data"' C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
.F 2 / 2 (100%)
Time: 00:00.005, Memory: 20.00 MB
There was 1 failure:
1) TestNamespace\TestCaseClass::testMethod with data set "my data2" (false)
Failed asserting that false is true.
C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php:12
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
这里确实断言”my data”是成功的,但是呢,”my data2”给提示出了错误。
这是因为这里filter匹配参数时候并不是直接以相等的这样精准匹配的,而是有点正则那意思,导致这里my data同时把my data2也匹配到了,而我们这里可以知道my data2其实是false。
所以这里就出现了总共2个测试,有一个断言失败的结果。
那么如果我直接测试my data2则肯定就是只有一个测试,且这个测试还是断言失败的:
C:\Users\Administrator>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar --filter 'TestNamespace\\TestCaseClass::testMethod.*"my data2"' C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 00:00.004, Memory: 20.00 MB
There was 1 failure:
1) TestNamespace\TestCaseClass::testMethod with data set "my data2" (false)
Failed asserting that false is true.
C:\Users\Administrator\PhpstormProjects\untitled\TestCaseClass.php:12
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
除了上面这几种filter玩法属于过滤器模式,那么完整的过滤器模式参考:https://phpunit.readthedocs.io/zh_CN/latest/textui.html,不过他这里里面好像有错,就我测试有带*#的那两个模式会出错,我的是win10
关键字词:phpunit,filter