自动化测试

admin 提交于 周三, 06/07/2023 - 15:21

自动化测试

Drupal 使用 PHPUnit 实现自动化测试,好好阅读 Drupal 自动化测试文档 比什么都重要。

Drupal 有 4 种测试类型

  • 单元测试 Unit

    不启动 Drupal 就能执行的测试,一般用于测试不依赖系统环境的简单类代码。 基类 Drupal\Tests\UnitTestCase

  • 内核测试 Kernel

    启动一个 Drupal 内核,并在不安装的情况下启用一些模块,可以读取数据库 用于测试需要访问数据库和系统服务支持,但不需要完整安装的 Drupal 实例支持的代码。 基类 Drupal\KernelTests\KernelTestBase

  • 功能测试 Functional

    启动完整的 Drupal 实例,一般测试对象是依赖完整安装的 Drupal 实例, 涉及用户界面,但不需要 JavaScript 支持的代码。 基类 Drupal\Tests\BrowserTestBase

  • 启用JS的功能测试 FunctionalJavascript

    用于测试需求启动完整系统实例,并包含 JavaScript 用户界面的代码。 基类 Drupal\FunctionalJavascriptTests\WebDriverTestBase

查看对应基类的代码文档,对理解这些测试类型会有更大的帮助。

编写测试

在开始编写测试代码前,系统地学习一遍 PHPUnit 官方文档 是很有必要的。

单元测试 Unit

太简单,直接上代码示例,下面的代码测试了 \Drupal\commerce_price\Price 类的一些基本使用方法:

class PriceTest extends UnitTestCase {

  /**
   * The price.
   *
   * @var \Drupal\commerce_price\Price
   */
  protected $price;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->price = new Price('10', 'USD');
  }

  /**
   * Tests creating a price from an invalid array.
   */
  public function testCreateFromInvalidArray() {
    $this->expectException(\InvalidArgumentException::class);
    $this->expectExceptionMessage('Price::fromArray() called with a malformed array.');
    $price = Price::fromArray([]);
  }

  /**
   * Tests creating a price from a valid array.
   */
  public function testCreateFromValidArray() {
    $price = Price::fromArray(['number' => '10', 'currency_code' => 'USD']);
    $this->assertEquals('10', $price->getNumber());
    $this->assertEquals('USD', $price->getCurrencyCode());
    $this->assertEquals('10 USD', $price->__toString());
    $this->assertEquals(['number' => '10', 'currency_code' => 'USD'], $price->toArray());
  }

}