TestCase 和 Assertions
Zend Framework 提供了帮助程序类来对控制器进行单元测试。TestCase是 PHPUnit 框架中编写测试用例的主要组件,而 Zend Framework 提供了TestCase 的抽象实现,称为AbstractHttpControllerTestCase。
AbstractHttpControllerTestCase 提供了各种Assert方法,并可以按功能分组。它们如下所示 −
-
Request Assertions − 用于断言 http 请求。例如,断言控制器名称。
-
CSS Select Assertions − 用于使用 HTML DOM 模型检查响应。
-
XPath Assertions − 基于 X 路径的 CSS 选择断言的替代方法。
-
Redirect Assertions − 用于检查页面重定向。
-
Response Header Assertions − 用于检查响应标头,如状态代码(断言响应状态代码)
创建测试目录
可以为每个模块单独编写单元测试。所有与测试相关的编码都需要在模块根目录下的test文件夹中创建。
例如,要为教程模块下可用的教程控制器编写测试,需要将测试类放在 myapp/module/Tutorial/test/Controller/目录下。
例
让我们编写一个测试类来单元测试TutorialController。
首先,我们应该编写一个名为“TutorialController”的类,并将其扩展到抽象Http控制器测试用例。
下一步是编写Setup方法来设置测试环境。这可以通过调用 setApplicationConfig方法并传递我们的主应用程序配置文件 myapp/config/application.config .php
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge(
include __DIR__ . '/../../../../config/application.config.php',
$configOverrides
));
parent::setUp();
}
编写一个或多个方法,并根据要求调用各种断言方法。
$this->assertMatchedRouteName('tutorial');
我们已经编写了测试类,完整的列表如下 -
<?php
namespace TutorialTest\Controller;
use Tutorial\Controller\TutorialController;
use Zend\Stdlib\ArrayUtils;
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;
class TutorialControllerTest extends AbstractHttpControllerTestCase {
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge(
include __DIR__ . '/../../../../config/application.config.php',
$configOverrides
));
parent::setUp();
}
public function testIndexActionCanBeAccessed() {
$this->dispatch('/tutorial', 'GET');
$this->assertResponseStatusCode(200);
$this->assertModuleName('tutorial');
$this->assertControllerName(TutorialController::class);
$this->assertControllerClass('TutorialController');
$this->assertMatchedRouteName('tutorial');
}
}
现在,打开命令提示符,转到应用程序根目录并执行vendor文件夹中可用的phpunit可执行文件。
cd /path/to/app
./vendor/bin/phpunit ./vendor/bin/phpunit module/
Tutorial/test/Controller/TutorialControllerTest.php
结果将如以下代码块所示 -
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
.1 / 1 (100%)
Time: 96 ms, Memory: 8.00MB
OK (1 test, 5 assertions)