记录下 phpunit 的入门使用方法

这周开始打算写个比较简单的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

// require_once 'vendor/autoload.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");
}
}

setUptearDown 就是初始化跟结束清理的,但是注意如果不指明 __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)