Laravel + PHPUnitでちょろっと単体テストやってたので、そのメモ。

目次

  1. 環境
  2. PHPUnitのインストール
  3. テスト対象のディレクトリ
  4. テスト対象のクラスとメソッド
  5. テストの実行
    1. phpunit.xml 以下全ディレクトリをテストする
    2. phpunit.xml 以下の指定したクラスのみテストする
    3. 実行結果サンプル

環境


たぶんLaravelのバージョンとかあんま関係ないかと思いますが、以下でやりました。

  • Laravel 4.2
  • PHPUnit 4.8.3

PHPUnitのインストール


LaravelでPHPUnitを使うにはcomposerでPHPUnitをインストールします。
composer.jsonに以下を追記。

1
2
3
"require-dev": {
"phpunit/phpunit": "~4.*",
}

テスト対象のディレクトリ


デフォルトはapp/testsディレクトリ以下がテスト対象となります。
変更する場合はルートディレクトリのphpunit.xmlを編集します。

テスト対象のクラスとメソッド


phpunit.xmlで指定したディレクトリ配下にテスト用のクラスとメソッドを作成します。
クラス名は****Test.phpメソッドはtest*****とすることでテスト対象と認識されます。

テストするクラスはTestCaseクラスを継承させる必要があります。
例えば、下記のコードだと、testA,testBがテスト対象のメソッドになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//TestCaseを継承する
class ExampleTest extends TestCase
{
public function testA()
{
//なんかテストコード書く
$this->assertEquals(予測値,実測値);
}

public function testB()
{
//なんかテストコード書く
$this->assertEquals(予測値,実測値);
}
}

テストの実行


phpunitコマンドでテストを実行します。

下記の2パターンあります。

  • phpunit.xmlで指定したディレクトリ配下の 「全ての」 テスト対象クラスのメソッドをテストする
  • phpunit.xmlで指定したディレクトリ配下の 「特定」 のテスト対象クラスのメソッドをテストする

phpunit.xml 以下全ディレクトリをテストする

1
./vendor/bin/phpunit

phpunit.xml 以下の指定したクラスのみテストする

1
./vendor/bin/phpunit app/tests/exapmle/ExampleTest.php

実行結果サンプル

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHPUnit 4.8.23 by Sebastian Bergmann and contributors.

.F

Time: 247 ms, Memory: 18.00Mb

There was 1 failure:

1) ExampleTest::testB
Failed asserting that 2 matches expected 1.

/app/tests/exapmle/ExampleTest.php:8

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

Jenkinsとか通して自動でやりたいですね。