单元测试
最后更新于:2022-04-02 05:12:57
[TOC]
# 概况
编写适当的测试可以帮助编写更好的软件。如果您设置了正确的测试用例,则可以消除大多数功能错误并更好地维护您的软件。
## 将PHPUnit与Phalcon集成
如果您还没有安装phpunit,可以使用以下composer命令来完成:
```bash
composer require phpunit/phpunit:^5.0
```
或者通过手动将其添加到 `composer.json`:
```json
{ "require-dev": { "phpunit/phpunit": "^5.0" } } ``` 安装PHPUnit后,在项目根目录中创建一个名为 `tests` 的目录: app/ public/ tests/ 接下来,我们需要一个'helper'文件来引导应用程序进行单元测试。 ## PHPUnit帮助文件 需要一个帮助文件来引导应用程序以运行测试。我们准备了一个示例文件。将文件作为 `TestHelper.php` 放在 `tests/` 目录中。 ```php registerDirs( [ ROOT_PATH, ] ); $loader->register(); $di = new FactoryDefault(); Di::reset(); // Add any needed services to the DI here Di::setDefault($di); ``` 如果您需要测试自己库中的任何组件,请将它们添加到自动加载器或使用主应用程序中的自动加载器。 为了帮助您构建单元测试,我们制作了一些抽象类,您可以使用它们来引导单元测试本身。这些文件存在于[Phalcon Incubator](https://github.com/phalcon/incubator)中。 您可以通过将Incubator库添加为依赖项来使用它: ```bash composer require phalcon/incubator ``` 或者通过手动将其添加到 `composer.json`: ```json { "require": { "phalcon/incubator": "^3.0" } } ``` 您还可以使用上面的repo链接克隆存储库。 ## `phpunit.xml` 文件 现在,创建一个 `phpunit.xml` 文件,如下所示: ```xml
./
```
修改 `phpunit.xml` 以满足您的需求并将其保存在 `tests` 中。这将在 `tests` 目录下运行任何测试。
## 单元测试样例
要运行任何单元测试,您需要定义它们。自动加载器将确保加载正确的文件,因此您需要做的就是创建文件,phpunit将为您运行测试。
此示例不包含配置文件,但大多数测试用例确实需要一个。您可以将其添加到 `DI` 以获取 `UnitTestCase` 文件。
首先在 `tests` 目录中创建一个名为 `UnitTestCase.php` 的基本单元测试:
```php
setDi($di);
$this->_loaded = true;
}
/**
* Check if the test case is setup properly
*
* @throws \PHPUnit_Framework_IncompleteTestError;
*/
public function __destruct()
{
if (!$this->_loaded) {
throw new \PHPUnit_Framework_IncompleteTestError(
"Please run parent::setUp()."
);
}
}
}
```
在命名空间中分离单元测试总是一个好主意。对于此测试,我们将创建命名空间“Test”。因此,创建一个名为 `tests\Test\UnitTest.php` 的文件:
```php
assertEquals(
"works",
"works",
"This is OK"
);
$this->assertEquals(
"works",
"works1",
"This will fail"
);
}
}
```
现在,当您从`tests`目录中的命令行执行`phpunit`时,您将获得以下输出:
```bash
$ phpunit
PHPUnit 3.7.23 by Sebastian Bergmann.
Configuration read from /var/www/tests/phpunit.xml
Time: 3 ms, Memory: 3.25Mb
There was 1 failure:
1) Test\UnitTest::testTestCase
This will fail
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'works'
+'works1'
/var/www/tests/Test/UnitTest.php:25
FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
```
现在您可以开始构建单元测试。你可以在这里查看一个[好的指南](http://blog.stevensanderson.com/2009/08/24/writing-great-unit-tests-best-and-worst-practises/)。如果您不熟悉PHPUnit,我们还建议您阅读PHPUnit文档。
';
{ "require-dev": { "phpunit/phpunit": "^5.0" } } ``` 安装PHPUnit后,在项目根目录中创建一个名为 `tests` 的目录: app/ public/ tests/ 接下来,我们需要一个'helper'文件来引导应用程序进行单元测试。 ## PHPUnit帮助文件 需要一个帮助文件来引导应用程序以运行测试。我们准备了一个示例文件。将文件作为 `TestHelper.php` 放在 `tests/` 目录中。 ```php registerDirs( [ ROOT_PATH, ] ); $loader->register(); $di = new FactoryDefault(); Di::reset(); // Add any needed services to the DI here Di::setDefault($di); ``` 如果您需要测试自己库中的任何组件,请将它们添加到自动加载器或使用主应用程序中的自动加载器。 为了帮助您构建单元测试,我们制作了一些抽象类,您可以使用它们来引导单元测试本身。这些文件存在于[Phalcon Incubator](https://github.com/phalcon/incubator)中。 您可以通过将Incubator库添加为依赖项来使用它: ```bash composer require phalcon/incubator ``` 或者通过手动将其添加到 `composer.json`: ```json { "require": { "phalcon/incubator": "^3.0" } } ``` 您还可以使用上面的repo链接克隆存储库。 ## `phpunit.xml` 文件 现在,创建一个 `phpunit.xml` 文件,如下所示: ```xml