警告
强烈建议升级到 CodeIgniter4。
将 PHPUnit 与 CodeIgniter 3.x 结合使用的更简单方法。
您根本不必修改 CodeIgniter 核心文件。
您可以轻松编写控制器测试。
也许没有什么是不可测试的。
有据可查。
PHP 7.3 或更高版本
如果您使用 Monkey Patching,则必须使用 PHP-Parser 4.2 或更高版本作为 Composer 依赖项。
代码点火器 3.x
如果您想升级到 CodeIgniter4,请参阅#361。
PHPUnit 9.3 或更高版本
如果您想使用 PHPUnit 9.2 或更早版本,请使用 ci-phpunit-test 2.x。
网豆
转到项目属性 > 测试 > PHPUnit ,选中使用自定义测试套件复选框,然后选择application/tests/_ci_phpunit_test/TestSuiteProvider.php
。
请参阅更改日志。
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
文件夹中。
就是这样。
$ cd /path/to/codeigniter/$ Composer require kenjis/ci-phpunit-test:^3.0 --dev
并运行install.php
:
$ php供应商/kenjis/ci-phpunit-test/install.php --from-composer
上述命令始终覆盖现有文件。
您必须在 CodeIgniter 项目根文件夹中运行它。
如果您使用自定义文件夹路径,则可以使用选项参数指定application
和public
。
$ php供应商/kenjis/ci-phpunit-test/install.php -a <应用程序目录> -p <公共目录> -t <单元测试目录>
所以默认是:
$ php供应商/kenjis/ci-phpunit-test/install.php -a应用程序-p公共-t应用程序/测试
但有些路径可能不正确,在这种情况下,请在tests/Bootstrap.php中修复它们。
从 https://github.com/kenjis/ci-phpunit-test/releases 下载最新的ci-phpunit-test
。
解压并替换application/tests/_ci_phpunit_test
文件夹。
阅读更改日志。
$ cd /path/to/codeigniter/$ 作曲家更新 kenjis/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
文件。在“设置主路径常量”部分的底部,添加以下内容:
定义('CI_PHPUNIT_TESTPATH',内爆(DIRECTORY_SEPARATOR, [目录名(APPPATH),'供应商','kenjis','ci-phpunit-test','应用程序','测试','_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。
如果您使用作曲家:
$ 作曲家需要 phpunit/phpunit --dev
$ cd /path/to/codeigniter/$vendor/bin/phpunit -c application/tests/PHPUnit 9.5.4 by Sebastian Bergmann 和贡献者.... 3 / 3 (100%)时间: 00:00.102, 内存: 12.00 MBOK(3 个测试,3 个断言)生成 Clover XML 格式的代码覆盖率报告...完成 [00:00.002]生成代码覆盖率报告HTML 格式...完成 [00:00.012]
要生成覆盖率报告,需要 Xdebug。
如果您想运行单个测试用例文件:
$供应商/bin/phpunit -c应用程序/测试/应用程序/测试/模型/Category_model_test.php
例如, Inventory_model
的测试用例类如下:
<?phpclass Inventory_model_test 扩展 TestCase {公共函数setUp(): void{$this->resetInstance();$this->CI->load->model('Inventory_model');$this->obj = $this->CI->Inventory_model; }公共函数 test_get_category_list() {$expected = [1 => '书籍',2 => 'CD',3 => 'DVD', ];$list = $this->obj->get_category_list();foreach ($list as $category) {$this->assertEquals($expected[$category->id], $category->name); } }公共函数 test_get_category_name() {$actual = $this->obj->get_category_name(1);$expected = '图书';$this->assertEquals($expected, $actual); } }
例如,Welcome 控制器的测试用例类如下:
<?phpclass Welcome_test 扩展测试用例 {公共函数test_index() {$output = $this->request('GET', 'welcome/index');$this->assertStringContainsString('<title>欢迎使用 CodeIgniter</title>', $output); } }
有关详细信息,请参阅如何编写测试。
请参阅函数和类参考。
请参阅提示。
ci-phpunit-test的一些功能可在以下独立包中使用。
https://github.com/kenjis/phpunit-helper
https://github.com/kenjis/monkey-patch
ci-phpunit-test 的 CodeIgniter 测试应用程序
CodeIgniter Composer 安装程序
CodeIgniter 3.0 的 CLI
CodeIgniter 简单且安全的 Twig
代码点火器原则
CodeIgniter 部署程序
CodeIgniter3 文件名检查器
CodeIgniter 小部件(查看部分)示例
CodeIgniter3 命名空间控制器