A A PHPUnit on Laravel - user000422/0 GitHub Wiki
基本情報
PHPテストを行うためのフレームワーク
実行時エラーログはphp_errors.log
対象クラスのロジックに「exit」が存在する場合はテストを行えない。(「exit」されないパターンは可能)
よく出てくる単語
単語 | 意味 |
---|---|
expected | 期待結果 |
ディレクトリ構成
/プロジェクトフォルダ
├─ tests
│ └ unit
│ └ sampleTest.php
└─ phpunit.xml
phpunit.xml(設定ファイル)
コマンド
# テスト作成(tests/Feature)
php artisan make:test SampleTest
# テスト実行
php artisan test tests/Feature/ExampleTest.php
[対象クラス名]Test.php(テストケース)
※PHPUnit 11実績のソース(ひな形)
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class SampleTest extends TestCase
{
protected function setUp(): void
{
parent::setUp(); // 必須
}
protected function testSample()
{
$this->assertTrue(true);
}
}
こちらはPHPUnit4
<?php
require_once('/sample/targetClass.php'); // 対象クラスのパス
// 対象クラス+Testのクラスを作成 「PHPUnit_Framework_TestCase」継承は固定
class targetClassTest extends PHPUnit_Framework_TestCase
{
// テーブルがクリアされるので使用しないこと
//use RefreshDatabase;
// テストメソッド メソッド名は自由
public function testMethod(){
// インスタンス生成(対象クラスのインスタンスを生成)
$targetClass = new targetClass();
// アサーション(第一引数が「期待結果」、第二引数が「実行結果」)
$this->assertEquals($expected, $sample_data);
}
}
(応用)データプロバイダ
コメントのアノテーションは重要 アノテーションを設定したメソッドがデータプロバイダの配列分ループするイメージ
<?php
require_once('/sample/targetClass.php');
class targetClassTest extends PHPUnit_Framework_TestCase
{
// データプロバイダ定義
public function sampleDataProvider(){
return [
'パターン1' => ['1', '2'],
'パターン2' => ['2', '3']
];
}
/**
* @dataProvider sampleDataProvider
*/
// データプロバイダの戻り値が引数に渡される
public function testMethod($num1, $expected){
// インスタンス生成省略
// アサーションで実行する対象メソッドの呼び出しにデータを渡すとデータプロバイダの配列分実行される
$this->assertEquals($expected, $sampleInstance->calcPlus1($num1, $end_date));
}
}
アサーション
// 真偽
$this->assertTrue(true);
// 比較(型は許容)
$this->assertEquals('期待結果', 'テスト結果');
// 部分一致
$this->assertStringContainsString('いうえ', 'あいうえお');
エラー対応
■テスト実行時に「Warning: require_once…」 1.対象クラスの「require_once」で定数を使用している場合はその定数をインクルードするための「require_once」をテストケースの最初に記述する。