如何在PHPUnit中过滤多个测试?

b0zn9rqh  于 2023-03-11  发布在  PHP
关注(0)|答案(7)|浏览(134)

我能够使用--filter选项从套件中运行单个测试。
我想知道是否有一种方法可以在套件下动态运行多个测试?
谢谢

vhmi4jdf

vhmi4jdf1#

用于过滤多个测试的简单正则表达式可能类似于--filter '/test1|test2|test4/'。这将匹配任何包含“test1”、“test2”或“test4”的测试,因此例如test43将被包括在内,但test3不会运行。检查区分大小写。

but5z9lq

but5z9lq2#

为我工作:

phpunit -c phpunit.dist.xml src --filter '/NameSpace\\UserBundle/|Namespace\\OtherBundle'

不为我工作:

phpunit -c phpunit.dist.xml src --filter "/NameSpace\\UserBundle/|Namespace\\OtherBundle"

白色双引号的结果对我来说是“没有执行测试!”
如果你不使用\在过滤器(名称空间),那么双引号工作完美,但与名称空间\bundle在我的设置,我需要使用单引号。

ybzsozfc

ybzsozfc3#

--filter选项运行名称与给定正则表达式模式匹配的测试,因此您应该能够通过提供合适的正则表达式作为参数来选择多个测试。
请参见PHPUnit command line test runner的文档

xam8gpfp

xam8gpfp4#

我建议使用“spatie/phpunit-watcher”(https://github.com/spatie/phpunit-watcher),它允许您执行这种类型的过滤

fruv7luv

fruv7luv5#

所以我最终创建了自己的配置文件,其中包含了我需要的所有测试,然后通过--configuration将其传递给PHPUnit。

w41d8nur

w41d8nur6#

您还可以使用**--group选项。
你只需要像这样给你的方法添加
@group**注解:

/**
 * @group test1
 */
 public function test_example(){
 ...

将**@group添加到要运行的测试中,或将类似测试分组到具有相同@group**名称的组中。
运行包含以下组的所有测试:

phpunit --group test1
wpcxdonn

wpcxdonn7#

在您的代码中,您可以为测试类的方法使用相同的模式,如下所示:

testUserShow()
testUserStore()
testUserUpdate()
testUserDestroy()

当使用--filter <pattern>时,如果执行--filter=testUser,它将使用该模式执行所有这些方法。
您可以选择其他选项进行测试。

相关问题