From O with B

From O with B

未熟なソフトウェアエンジニアの技術ブログ

PHPUnit入門・・・②失敗の動作確認〜別ファイルの関数をテストする

PHPUnit

続きです。

ishmeal.hatenablog.com

↑前回の記事

テストを失敗させてみよう

面倒な人は飛ばしたり眺めておくだけでオッケーです。

// ExampleTest.php

<?php

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    public function testAddingTwoPlusTwoResultsInFour()
    {       
        $this->assertEquals(5, 2 + 2); //「4」を「5」に変更
    }
}

前回書いたテストの「assertEquals」の第一引数に5を入れます。

つまりこれは「2 + 2は5だよね?」と問うているわけですね。

もちろんこれは……

$ phpunit tests

There was 1 failure:

1) ExampleTest::testAddingTwoPlusTwoResultsInFour
Failed asserting that 4 matches expected 5.

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

失敗してしまいます。

「5 を期待していたのに結果は 4 でした」的なことも書いてありますね。

失敗すると「Failures」に数値がカウントされます。

確認したらもとのようにExampleTest.phpのassertEqulsの第一引数を「4」に戻しておきましょう。

// ExampleTest.php

<?php

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{  
    public function testAddingTwoPlusTwoResultsInFour()
    {      
        $this->assertEquals(4, 2 + 2); //もとに戻しておく
    }
}

PHPUnitの基本

初めてのテストを書く&実行を通じて、

  1. テストファイルを「○○Test.php」の名前で作る

  2. assertEqual()の第一引数は期待値、第二引数は式(関数)

  3. テストファイルの基本フォーマットは↓

<?php

use PHPUnit\Framework\TestCase; // 基本的に絶対書く

class 「ファイル名」 + Test extends TestCase // これも基本的に絶対書く
{
    public function test + 「○○()// ←わかりやすいテスト名にする
    {      
        $this->  // ここにassert○○を書いていく
    }
}

といったことがわかりました。

でも今の所はプロジェクトフォルダ直下にはtestsフォルダとvendorフォルダしかなく、

テストも「2 + 2」がちゃんと動作しているか確かめただけです。

実際の開発で「2 + 2」をテストすることは......まずないと思います笑。やはり自作の関数をテストするはずです。

というわけで次はテスト対象になるファイル及び関数を作りましょう。

Function.phpファイルのadd()メソッドをテストする

Fuction.phpを作成

プロジェクトフォルダの直下に「Fuction.php」を作成しましょう。

$ touch Fuction.php

中身は以下のようにします。

// Function.php

<?php

 function add($a, $b) {

     return $a + $b;

 }

上の関数add()は第一引数と第二引数を足した値を返します。

ってこれ「2 + 2」の時とあんま変わらんやんけー!ってなるかもですが何事も一歩ずつです。

ではこれをテストするテストファイル「FuctionTest.php」をtests配下に作成します。

$ touch tests/FunctionTest.php

↓がFuctionTest.phpの中

<?php

use PHPUnit\Framework\TestCase; 

class FunctionTest extends TestCase
{   // 正しい値を返すテスト
    public function testAddReturnTheCorrectSum()
    {   //  テストするファイルを指定する
        require 'function.php';
        // 今度は第二引数にfuction.phpで定義した関数を入れる
        $this->assertEquals(4, add(2, 2));
    }
}

意味としてははじめてのテストと同じことをしています。

つまり「2 + 2 は4になるよね」というテストなわけですね。

しかし今回はrequire の後にテスト対象のファイルを指定し、そこから関数を呼び出しています。

$ phpunit tests/FuctionTest.php

わかりやすいように今回はファイル名まで指定してテストしましょう。これでFuctionTest.phpだけが走ります。

$ phpunit tests/FuctionTest.php

(略)

OK (1 tests, 1 assertions)

うまく通ったと思います……!

ちなみにassertEqulsをもう一個足してもオッケーです

<?php

use PHPUnit\Framework\TestCase; 

class FunctionTest extends TestCase
{   // 正しい値を返すテスト
    public function testAddReturnTheCorrectSum()
    {   //  テストするファイルを指定する
        require 'function.php';
        // 今度は第二引数にfuction.phpで定義した関数を入れる
        $this->assertEquals(4, add(2, 2));
        $this->assertEquals(8, add(4, 4)); // ←もう一個assert文を追加
    }
}
$ phpunit tests/FuctionTest.php

(略)

OK (1 tests, 2 assertions)

この場合だと2つのassert文が通ってはじめてテストが1つパスしたとなります。

よりチェックすべき観点を細かくしたい場合はこのように複数のassertを入れることができます。

参考にしている教材

私自身はUdemyにて下記教材を購入して勉強中です。

www.udemy.com

て、これE, Eigoじゃん・・・と思うかもしれませんが、ゆっくり聞き取りやすく発音してくれているのでそこまで英語に自身がない人でも全然進められると思います!

グローバルなWebサービスなので、ネイティブ以外の方が受講されるのも想定済なのでしょうか。

動画や音声で学びたい!って方は上の講座おすすめです!

本ブログではなるべく初心者目線で深堀りしすぎない記事を発信していくつもりです。

ではまた〜。