環境構築等の参考はこちら
PHPテストフレームワークPestを試してみる - Qiita
こちらも公式がとてもわかりやすい。
参考サイト
Pest - An elegant PHP Testing Framework | Assertions
テストの説明を日本語にしていて若干読みやすい例。
ちなみに例は、"test"を"it"に書き変えてもそのまま動くはずです
tests/Unit/sampleTest.php
<?php
test('足し算のテスト', function () {
$sum = 1 + 1;
assertEquals(2, $sum);
});
test('引き算のテスト', function () {
$sum = 2 - 1;
assertEquals(1, $sum);
});
test('真テスト', function () {
assertTrue(true);
});
test('偽テスト', function () {
assertFalse(false);
});
test('同じ数か?', function () {
$array = [1, 2, 3, 4, 5];
assertCount(5, $array);
});
test('同じものかどうか', function () {
$var = 'hoge';
$this->assertEquals('hoge', $var);
});
test('空かかどうか', function () {
$empty_array = [];
$this->assertEmpty($empty_array);
});
test('特定の文字列を含むか', function () {
$hoge = 'hogetarou';
assertStringContainsString('hoge', $hoge);
});
# 結果表示がよい。
./vendor/bin/pest
PASS Tests\Unit\sampleTest
✓ 足し算のテスト
✓ 引き算のテスト
✓ 上($this)と下は同じ
✓ 真テスト
✓ 偽テスト
✓ カウント
✓ 同じものかどうか
✓ 空かかどうか
✓ 特定の文字列を含むか
Tests: 9 passed
Time: 0.65s
$thisをつけて呼んでもよい。ないほうが好み。
test('上($this)と下は同じ', function () {
$this->assertTrue(true);
// 上と下は同じ
assertTrue(true);
});
PHPUnitのAssertionsメソッドたちがそのまま使えるらしい。
1. Assertions — PHPUnit 9.0 Manual
グループ毎に実行できる
<?php
test('足し算のテスト', function () {
$sum = 1 + 1;
assertEquals(2, $sum);
})->group('calc');
test('引き算のテスト', function () {
$sum = 2 - 1;
assertEquals(1, $sum);
})->group('calc');
test('かけ算のテスト', function () {
$result = 2 * 2;
assertEquals(4, $result);
})->group('calc');
test('わり算のテスト', function () {
$result = 2 / 1;
assertEquals(2, $result);
})->group('calc');
// グループを指定してテスト実行
./vendor/bin/pest --group=calc
PASS Tests\Unit\sampleTest
✓ 足し算のテスト
✓ 引き算のテスト
✓ かけ算のテスト
✓ わり算のテスト
Tests: 4 passed
参考サイト
Pest - An elegant PHP Testing Framework | Groups Of Tests
任意のテストをskipする
<?php
// skip
test('足し算のテスト', function () {
$sum = 1 + 1;
assertEquals(2, $sum);
})->group('calc')->skip();
// コメントつきskip
test('引き算のテスト', function () {
$sum = 2 - 1;
assertEquals(1, $sum);
})->group('calc')->skip('testでskip');
// 条件付きskip
// 使いどころがありそう
test('かけ算のテスト', function () {
$num = 10;
$result = 2 * 2;
assertEquals(4, $result);
})->group('calc')->skip($num < 100, 'numが100より小さければskip');
WARN Tests\Unit\sampleTest
s 足し算のテスト
s 引き算のテスト → testでskip
s かけ算のテスト → numが100より小さければskip
Tests: 3 skipped
Time: 0.38s
デバックしたいとき
// ひとつだけテスト実行
test('わり算のテスト', function () {
$result = 2 / 1;
assertEquals(2, $result);
})->group('calc')->only();
PASS Tests\Unit\sampleTest
✓ わり算のテスト
Tests: 1 passed
あとでテストを書きたいとき
test('あとで複雑な計算のテストを書く');
or
it('あとで複雑な計算のテストを書く');
WARN Tests\Unit\sampleTest
r あとで複雑な計算のテストを書く → This test did not perform any assertions /app/vendor/pestphp/pest/src/Factories/TestCaseFactory.php(185) : eval()'d code:4
Tests: 1 risked
Time: 0.26s
参考サイト
Pest - An elegant PHP Testing Framework | Skipping Tests
感想
便利だし、書きやすいのではないでしょうか。