php - PHPUnit 中的测试级别/组

标签 php unit-testing phpunit

我们已经在我们的代码库上实现了一些 PHPUnit 测试。然而,向前推进,为了最大限度地减少运行测试所需的时间,我想将我们的测试分为两组或级别:

  1. 非常低级的测试,不会访问测试数据库(单元测试)
  2. 更高级别的测试并与测试数据库交互(有时称为组件或集成测试)

这将允许我们在处理基本功能时只运行 1 级测试,而在处理更高级别的功能时或在提交到主线/构建之前运行 1 级和 2 级测试。

我将如何使用 PHPUnit 完成此任务?

最佳答案

@Schleis 的回答完全正确,非常有用。唯一的问题(我承认我没有包括在我的问题中)是我希望能够在我们的测试文件中分散单元和集成测试——我想避免有两个测试文件——一个文件用于单元测试用于 SomeClass,以及用于功能测试的单独文件,也用于 SomeClass。

我发现启用此功能的 PHPUnit 命令行选项是 groups :

--组 仅运行来自指定组的测试。可以使用@group 注释将测试标记为属于一个组。

要使用这种方法,您只需在测试之前将 @group 注释添加到多行注释中:

class SomeClassTest extends PHPUnit_Framework_TestCase {
    /**
     * @group Unit
     */
    public function testSomeUnitFunctionality() {
        $this->assertEquals(xyz(' .a1#2 3f4!', true), ' 12 34');
    }

    /**
     * @group Integration
     */
    public function testSomeIntegrationFunctionality() {
        $this->assertEquals(xyz(' .a1#2 3f4!', true), ' 12 34');
    }
}

这允许我执行以下操作:

  • phpunit --group Unit(只是单元测试)
  • phpunit --group Integration(只是集成测试)
  • phpunit(所有测试)

关于php - PHPUnit 中的测试级别/组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180186/

相关文章:

php - PHP 中 SQL 注入(inject)的验证和检测

php - mysql 不接受撇号 '

php - Laravel 5.1 修改密码功能

c# - 如何对对话交互进行单元测试

testing - 这个 fatal error 从何而来? cakephp phpunit

php - 当我尝试使用 PHPUnit 获取单元测试的代码覆盖率时,没有任何反应

php - 我如何使用 "strcspn"或 "any other Approach to change key of Array"来获得适当的结果?

使用 @ContentChild 的 Angular 单元测试失败

unit-testing - 原始单元测试

在 catch block 中设置对象属性时 PHPUnit 测试失败