自动化测试
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());
}
}
登录后查看完整内容