phpunitを使用したテストケースの簡単なサンプルを作成してみました。
ゴール
今回テストのゴールは、テスト対象のプログラムの分岐が全て通るを確認することです。
プログラムの動きと構成の説明
以下のフォームとクラスを用意します。
① “/sample” にPOSTリクエストするフォーム(test.blade.php)。
② “/sample” がリクエストされたら、TestController の indexメソッド を実行する。
③ TestController の indexメソッド の内容は要素の名前に “name” が存在したら、”OK” を通り、存在しない場合は “NG” を通る。
フォームの説明
下記内容のフォーム(test.blade.php)を用意します。
① name属性が “name” のテキストを用意する。
② pushボタンを押下すると “/sample” へPOSTを送信する。
1 2 3 4 5 6 7 8 9 10 11 |
<form action="/sample" method="POST"> {!! csrf_field() !!} <div> Name: <input type="text" name="name"> </div> <div> <button type="submit" value="Register" name="push">push</button> </div> </form> |
ルーティングの内容
ルーティングの内容も以下の通りにします。
① “/test” にリクエストするとフォーム(test.blade.php)を表示する。
② “/sample” にリクエストすると TestController の indexメソッド を実行する。
1 2 3 4 5 |
Route::get('/test', function () { return view('test'); }); Route::post('/sample', 'TestController@index'); |
コントローラの説明
下記内容のコントローラ(TestController)を用意します。
① 要素の名前が “name” であるかを判定し、存在する場合は “OK” を通り、存在しなかったら、”NG” を通る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { public function index(Request $request){ if ($request->has('name')) { print("OK"); } else { print("NG"); } } } |
テストプログラム
テストプログラムを以下に示します。
testsフォルダ以下にSample01Test.phpを配置します。
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 29 30 31 32 |
use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; class Sample01Test extends TestCase { // ミドルウェアを停止する。 use WithoutMiddleware; // "name"属性を持つテキストを送信するケース public function testPostNameOK() { // testへリクエストと後、pushボタンを押下して出力を確認する。 // その際、"name"属性を持つテキストを送信する。 $this->visit('/test') ->type("sample","name") ->press('push'); } // "name"属性を持つテキストを送信しないケース public function testPostNameNG() { // testへリクエストと後、pushボタンを押下して出力を確認する。 // その際、"name"属性を持つテキストを送信しない。 $this->visit('/test') ->press('push'); } } |
プログラムの実行
以下をコマンドプロンプトより実行します。
1 |
C:\xampp\htdocs\test>vendor\bin\phpunit |
以下のような結果が表示されたらOKです
1 2 3 4 5 6 7 8 9 |
PHPUnit 5.7.21 by Sebastian Bergmann and contributors. .OK. 2 / 2 (100%)NG Time: 999 ms, Memory: 12.00MB OK (2 tests, 4 assertions) Generating code coverage report in HTML format ... done |