kenjis / ci-phpunit-test
使用PHPUnit与CodeIgniter 3.x更简单的方式
v3.0.4
2022-12-26 04:22 UTC
Requires
- php: >=7.3
- nikic/php-parser: ^4.2
- 3.x-dev
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- 2.x-dev
- v2.0.2
- v2.0.1
- v2.0.0
- dev-master / 1.0.x-dev
- v1.0.2
- v1.0.1
- v1.0.0
- v0.19.0
- v0.18.0
- v0.17.3
- v0.17.2
- v0.17.1
- v0.17.0
- v0.16.1
- v0.16.0
- v0.15.0
- v0.14.0
- v0.13.0
- v0.12.2
- v0.12.1
- v0.12.0
- v0.11.3
- v0.11.2
- v0.11.1
- v0.11.0
- v0.10.1
- v0.10.0
- v0.9.1
- v0.9.0
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.1
- v0.1.0
This package is auto-updated.
Last update: 2024-09-16 13:26:18 UTC
README
警告
使用CodeIgniter 3.x与PHPUnit更简单的方式。
- 无需修改CodeIgniter核心文件。
- 可以轻松编写控制器测试。
- 几乎没有什么是不可以测试的。
- 文档齐全。
要求
- PHP 7.3或更高版本
- 如果您使用Monkey Patching,您必须将PHP-Parser 4.2或更高版本作为Composer依赖项使用。
- CodeIgniter 3.x
- 如果您想升级到CodeIgniter4,请参阅#361。
- PHPUnit 9.3或更高版本
- 如果您想使用PHPUnit 9.2或更早版本,请使用ci-phpunit-test 2.x。
可选
- NetBeans
- 转到项目属性 > 测试 > PHPUnit,勾选使用自定义测试套件复选框,并选择
application/tests/_ci_phpunit_test/TestSuiteProvider.php
。
- 转到项目属性 > 测试 > PHPUnit,勾选使用自定义测试套件复选框,并选择
变更日志
查看变更日志。
目录结构
codeigniter/
├── application/
│ └── tests/
│ ├── _ci_phpunit_test/ ... don't touch! files ci-phpunit-test uses
│ ├── Bootstrap.php ... bootstrap file for PHPUnit
│ ├── DbTestCase.php ... DbTestCase class
│ ├── TestCase.php ... TestCase class
│ ├── controllers/ ... put your controller tests
│ ├── libraries/ ... put your library tests
│ ├── mocks/
│ │ └── libraries/ ... mock libraries
│ ├── models/ ... put your model tests
│ └── phpunit.xml ... config file for PHPUnit
└── vendor/
安装
手动安装
- 从https://github.com/kenjis/ci-phpunit-test/releases下载最新的
ci-phpunit-test
。 - 解压并将
application/tests
文件夹复制到CodeIgniter项目的application
文件夹中。
就是这样。
Composer安装
$ cd /path/to/codeigniter/ $ composer require kenjis/ci-phpunit-test:^3.0 --dev
并运行install.php
$ php vendor/kenjis/ci-phpunit-test/install.php --from-composer
- 上述命令始终会覆盖现有文件。
- 您必须在CodeIgniter项目根目录下运行它。
- 如果您使用自定义文件夹路径,可以使用选项参数指定您的
application
和public
文件夹。
$ php vendor/kenjis/ci-phpunit-test/install.php -a <application_dir> -p <public_dir> -t <unittest_dir>
所以默认情况下会是
$ php vendor/kenjis/ci-phpunit-test/install.php -a application -p public -t application/tests
- 但是某些路径可能不正确,在这种情况下,请在tests/Bootstrap.php中修复它们。
升级
手动升级
- 从https://github.com/kenjis/ci-phpunit-test/releases下载最新的
ci-phpunit-test
。 - 解压并替换
application/tests/_ci_phpunit_test
文件夹。 - 阅读变更日志。
Composer升级
$ cd /path/to/codeigniter/ $ composer update kenjis/ci-phpunit-test
阅读变更日志。
如果您想删除application/test/_ci_phpunit_test/
如果您是从创建了一个application/test/_ci_phpunit_test
目录的ci-phpunit-test
旧版本升级,现在想直接从Composer使用ci-phpunit-test
,您需要执行一些额外的步骤
- 删除旧的测试库目录
$ rm -rf /path/to/codeigniter/application/tests/_ci_phpunit_test
- 编辑
application/tests/Bootstrap.php
文件。在“设置主路径常量”部分的底部,添加以下内容define('CI_PHPUNIT_TESTPATH', implode( DIRECTORY_SEPARATOR, [dirname(APPPATH), 'vendor', 'kenjis', 'ci-phpunit-test', 'application', 'tests', '_ci_phpunit_test'] ).DIRECTORY_SEPARATOR);
并将任何对__DIR__ . '/_ci_phpunit_test/'
或TESTPATH . '_ci_phpunit_test'
的引用替换为CI_PHPUNIT_TESTPATH . '
。(例如,__DIR__ . '/_ci_phpunit_test/CIPHPUnitTest.php'
将变为CI_PHPUNIT_TESTPATH . '/CIPHPUnitTest.php'
。)
如何运行测试
在运行测试之前,您需要安装PHPUnit。
如果您使用Composer
$ composer require phpunit/phpunit --dev
运行所有测试
$ cd /path/to/codeigniter/ $ vendor/bin/phpunit -c application/tests/ PHPUnit 9.5.4 by Sebastian Bergmann and contributors. ... 3 / 3 (100%) Time: 00:00.102, Memory: 12.00 MB OK (3 tests, 3 assertions) Generating code coverage report in Clover XML format ... done [00:00.002] Generating code coverage report in HTML format ... done [00:00.012]
要生成覆盖率报告,需要Xdebug。
运行单个测试
如果您想运行单个测试用例文件
$ vendor/bin/phpunit -c application/tests/ application/tests/models/Category_model_test.php
如何编写测试
例如,对于Inventory_model
的测试用例类如下所示
<?php class Inventory_model_test extends TestCase { public function setUp(): void { $this->resetInstance(); $this->CI->load->model('Inventory_model'); $this->obj = $this->CI->Inventory_model; } public function test_get_category_list() { $expected = [ 1 => 'Book', 2 => 'CD', 3 => 'DVD', ]; $list = $this->obj->get_category_list(); foreach ($list as $category) { $this->assertEquals($expected[$category->id], $category->name); } } public function test_get_category_name() { $actual = $this->obj->get_category_name(1); $expected = 'Book'; $this->assertEquals($expected, $actual); } }
例如,对于Welcome控制器的测试用例类如下所示
<?php class Welcome_test extends TestCase { public function test_index() { $output = $this->request('GET', 'welcome/index'); $this->assertStringContainsString( '<title>Welcome to CodeIgniter</title>', $output ); } }
详见编写测试指南获取详细信息。
函数/类参考
详见函数和类参考。
技巧
详见技巧。
独立包
以下独立包中包含了ci-phpunit-test的一些功能。