📅  最后修改于: 2020-10-16 07:47:31             🧑  作者: Mango
通常,我们可以使用高级调试器工具或简单的命令(如echo和die)来调试PHP应用程序。在Web场景中,我们需要测试业务逻辑以及表示层。可以通过输入相关的测试数据来测试Web应用程序中的表单,以确保表单按预期工作。
可以使用浏览器手动测试网站的设计。这些类型的测试过程可以使用单元测试来自动化。在大型项目中,单元测试至关重要。这些单元测试将有助于自动化测试过程,并在出现问题时提醒开发人员。
Zend框架与PHPUnit单元测试框架集成。要为Zend框架编写单元测试,我们需要设置PHPUnit,这可以通过使用以下Composer命令轻松完成。
$ composer require --dev phpunit/phpunit
执行完上述命令后,您将获得响应,如以下代码块所示。
Using version ^5.7 for phpunit/phpunit
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
现在,当您打开“ composer.json”文件时,您将看到以下更改-
"require-dev": {
"phpunit/phpunit": "^5.7"
}
Zend框架提供了帮助程序类来对控制器进行单元测试。 TestCase是PHPUnit框架中编写测试用例的主要组件,Zend框架提供了TestCase的抽象实现,称为AbstractHttpControllerTestCase 。
此AbstractHttpControllerTestCase提供了各种Assert方法,并且可以按功能分组。它们如下-
请求断言-用于断言http请求。例如,assertControllerName。
CSS选择断言-用于使用HTML DOM模型检查响应HTML。
XPath断言-基于XPath的CSS选择断言的替代方法。
重定向断言-用于检查页面重定向。
响应头声明-用于检查响应头,例如状态码(assertResponseStatusCode)
可以为每个模块分别编写单元测试。所有与测试相关的编码都需要在模块根目录下的test文件夹内创建。
例如,要为Tutorial模块下可用的TutorialController编写测试,则需要将测试类放置在myapp / module / Tutorial / test / Controller /目录下。
让我们编写一个测试类来对TutorialController进行单元测试。
首先,我们应该编写一个名为TutorialControllerTest的类并将其扩展到AbstractHttpControllerTestCase。
下一步是编写一个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');
我们已经编写了测试类,完整的清单如下-
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)