私は 2015 年の半ばに純粋な PHP を学び始めました。その後、CodeIgniter 3 と Laravel 5.1 に慣れてきました。何年もの間、Laravel は私が選んだフレームワークであり、今でもそれを使い続けています。他の人気のある PHP プロジェクトと同様に、単体テストには PHPUnit が唯一の選択肢であることがわかります。しかし、ペストがやって来た2021年に少し変化がありました。これは、Nuno Maduro によって作成されました。Nuno Maduro は Laravel のエンジニアであり、PHP や Laravel コミュニティで広く使用されている優れたプロジェクト/パッケージも数多く作成しています。
Pest の初日以来、私は PHPUnit で十分であり、この新しいテスト ツールを学ぶのが面倒なので、Pest のことを気にしていませんでした。しかし、Laravel コミュニティが成長すればするほど、Pest が推奨されるようになります。 Spatie、Livewire、Filament などの多くの Laravel プロジェクト/パッケージは Pest を使用しています。したがって、問題は、それらに関連するものをテストするときに、PHPUnit に移植する必要があることです。仕方がないようです。今度は Pest を見てみましょう。
インストールセクションに続いて、Pest を使用して最初の PHP プロジェクトを作成します。
mkdir ~/Herd/lerning-pest cd ~/Herd/learning-pest composer require pestphp/pest --dev --with-all-dependencies ./vendor/bin/pest --init
ディレクトリ構造はPHPUnitとほぼ同じです。違うのはテストの見た目です。クラスベースではなくクロージャベースです。
<?php // tests/Unit/ExampleTest.php test('example', function () { expect(true)->toBeTrue(); });
実行時にオブジェクトにメソッドを遅延的にアタッチできる Closure の使用を知っています。したがって、これは PHPUnit でこのように書き直される可能性があります。
<?php // tests/Unit/ExampleTest.php class ExampleTest extends \PHPUnit\Framework\TestCase { public function test_example() { $this->assertTrue(true); } }
Pest アサーション構文は Ruby の Rspec と Jest からインスピレーションを得ていると書かれていますが、私は知りません。なので、私もあまり興味がありません。私にとって、アサーション構文がどのようなものであるかは重要ではありません。
テストの実行時に表示される結果が気に入っています。 PHPUnit よりもはるかに美しく、クリーンだと思います。
これらは、私が PHPUnit で最もよく使用したアサーションです。
$this->assertSame($expected, $actual); $this->assertTrue($condition); $this->assertFalse($condition); $this->assertNull($actual); $this->assertEmpty($array); $this->assertCount($count, $countable); $this->assertInstanceof($type, $instance);
これらは Pest で簡単に書き直すことができます。
expect($actual)->toBe($expected); expect($condition)->toBeTrue(); expect($condition)->toBeFalse(); expect($actual)->toBeNull(); expect($actual)->toBeEmpty(); expect($actual)->toBeInstanceOf($type);
前に述べたように、Pest アサーション構文は問題ありませんが、新しい API を勉強する必要がないため、現在は PHPUnit を使い続けています。とにかく、私は PHPUnit アサーションを好み、Pest でユニークなものだけを使用します。アーキテクチャのテストはその一例です。私のテストファイルは次のようになります。
<?php test("all PHP files in LearningPest namespace must have strict mode enabled", function () { arch() ->expect('LearningPest') ->toUseStrictTypes(); }); test('all PHPUnit assertions are available for Pest', function () { $instance = new \stdClass(); $getInstance = function () use ($instance) { return $instance; }; $this->assertSame($instance, $getInstance()); $this->assertInstanceOf(stdClass::class, $instance); $this->assertTrue(1 < 2); $this->assertFalse(1 > 2); $value = null; $this->assertNull($value); $this->assertEmpty([]); $array = [1, 2, 3]; $this->assertCount(3, $array); });
PHPUnit と同様に Pest で作業できるようにする必須の機能が多数あります。ここにそれらがあります:
Mockery はスタンドアロン ライブラリであるため、ここにはリストしません。
一方、Pest には、アーキテクチャ、スナップショット、ストレス テスト、プラグインなど、便利なものがたくさんあります。テストを書くときにそれらを発見します。
Pest を使用したことがない PHP 開発者の方は、ぜひ試してみてください。
以上が最終的に PHP と Laravel 用の Pest を試してから切り替えましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。