这周开始打算写个比较简单的php工具包,然后顺带学习使用下php的单元测试,通过phpunit还是比较方便的,首先就composer require phpunit/phpunit
安装下 phpunit
, 前面包就是通过 composer init
创建,装完依赖后就可以把自动加载代码生成下 composer dump-autoload
目录结构差不多这样1 2 3 4 5 6 7 8 9 10 11
| . ├── composer.json ├── composer.lock ├── oldfile.txt ├── phpunit.xml ├── src │ └── Rename.php └── tests └── RenameTest.php
2 directories, 6 files
|
src/
是源码,tests/
是放的单测,比较重要的是phpunit.xml
1 2 3 4 5 6 7 8
| <?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true" bootstrap="vendor/autoload.php"> <testsuites> <testsuite name="php-rename"> <directory>./tests/</directory> </testsuite> </testsuites> </phpunit>
|
其中bootstrap就是需要把依赖包的自动加载入口配上,因为这个作为一个package,也会指出命名空间
然后就是testsuite的路径,源码中1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php namespace Nicksxs\PhpRename;
class Rename { public static function renameSingleFile($file, $newFileName): bool { if(!is_file($file)) { echo "it's not a file"; return false; } $fileInfo = pathinfo($file); return rename($file, $fileInfo["dirname"] . DIRECTORY_SEPARATOR . $newFileName . "." . $fileInfo["extension"]); } }
|
就是一个简单的重命名
然后test代码是这样,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?php
use PHPUnit\Framework\TestCase; use Nicksxs\PhpRename\Rename; use function PHPUnit\Framework\assertEquals;
class RenameTest extends TestCase { public function setUp() :void { $myfile = fopen(__DIR__ . DIRECTORY_SEPARATOR . "oldfile.txt", "w") or die("Unable to open file!"); $txt = "file test1\n"; fwrite($myfile, $txt); fclose($myfile); } public function testRename() { Rename::renameSingleFile(__DIR__ . DIRECTORY_SEPARATOR . "oldfile.txt", "newfile"); assertEquals(is_file(__DIR__ . DIRECTORY_SEPARATOR . "newfile.txt"), true); }
protected function tearDown(): void { unlink(__DIR__ . DIRECTORY_SEPARATOR . "newfile.txt"); } }
|
setUp
跟 tearDown
就是初始化跟结束清理的,但是注意如果不指明 __DIR__
,待会的目录就会在执行 vendor/bin/phpunit
下面,
或者也可以指定在一个 tmp/
目录下
最后就可以通过vendor/bin/phpunit
来执行测试
执行结果1 2 3 4 5 6 7 8
| ❯ vendor/bin/phpunit PHPUnit 9.5.25 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 00:00.005, Memory: 6.00 MB
OK (1 test, 1 assertion)
|