12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPテストフレームワークPestのテストの書き方例

Last updated at Posted at 2020-05-30

環境構築等の参考はこちら

PHPテストフレームワークPestを試してみる - Qiita

こちらも公式がとてもわかりやすい。

参考サイト

Pest - An elegant PHP Testing Framework | Assertions

テストの説明を日本語にしていて若干読みやすい例。

ちなみに例は、"test"を"it"に書き変えてもそのまま動くはずです

tests/Unit/sampleTest.php
<?php

test('足し算のテスト', function () {
    $sum = 1 + 1;
    assertEquals(2, $sum);
});

test('引き算のテスト', function () {
    $sum = 2 - 1;
    assertEquals(1, $sum);
});

test('真テスト', function () {
    assertTrue(true);
});

test('偽テスト', function () {
    assertFalse(false);
});

test('同じ数か?', function () {
    $array = [1, 2, 3, 4, 5];

    assertCount(5, $array);
});

test('同じものかどうか', function () {
    $var = 'hoge';

    $this->assertEquals('hoge', $var);
});

test('空かかどうか', function () {
    $empty_array = [];

    $this->assertEmpty($empty_array);
});

test('特定の文字列を含むか', function () {
    $hoge = 'hogetarou';

    assertStringContainsString('hoge', $hoge);
});

# 結果表示がよい。
./vendor/bin/pest
   PASS  Tests\Unit\sampleTest
   足し算のテスト
   引き算のテスト
   ($this)と下は同じ
   真テスト
   偽テスト
   カウント
   同じものかどうか
   空かかどうか
   特定の文字列を含むか

  Tests:  9 passed
  Time:   0.65s

$thisをつけて呼んでもよい。ないほうが好み。

test('上($this)と下は同じ', function () {
    $this->assertTrue(true);

    // 上と下は同じ
    assertTrue(true);
});

PHPUnitのAssertionsメソッドたちがそのまま使えるらしい。
1. Assertions — PHPUnit 9.0 Manual

グループ毎に実行できる

<?php

test('足し算のテスト', function () {
    $sum = 1 + 1;
    assertEquals(2, $sum);
})->group('calc');

test('引き算のテスト', function () {
    $sum = 2 - 1;
    assertEquals(1, $sum);
})->group('calc');

test('かけ算のテスト', function () {
    $result = 2 * 2;
    assertEquals(4, $result);
})->group('calc');

test('わり算のテスト', function () {
    $result = 2 / 1;
    assertEquals(2, $result);
})->group('calc');

// グループを指定してテスト実行
./vendor/bin/pest --group=calc

   PASS  Tests\Unit\sampleTest
   足し算のテスト
   引き算のテスト
   かけ算のテスト
   わり算のテスト

  Tests:  4 passed

参考サイト
Pest - An elegant PHP Testing Framework | Groups Of Tests

任意のテストをskipする


<?php
// skip
test('足し算のテスト', function () {
    $sum = 1 + 1;
    assertEquals(2, $sum);
})->group('calc')->skip();

// コメントつきskip
test('引き算のテスト', function () {
    $sum = 2 - 1;
    assertEquals(1, $sum);
})->group('calc')->skip('testでskip');

// 条件付きskip
// 使いどころがありそう
test('かけ算のテスト', function () {
    $num = 10;

    $result = 2 * 2;
    assertEquals(4, $result);
})->group('calc')->skip($num < 100, 'numが100より小さければskip');

   WARN  Tests\Unit\sampleTest
  s 足し算のテスト
  s 引き算のテスト  testでskip
  s かけ算のテスト  numが100より小さければskip

  Tests:  3 skipped
  Time:   0.38s

デバックしたいとき

// ひとつだけテスト実行
test('わり算のテスト', function () {
    $result = 2 / 1;
    assertEquals(2, $result);
})->group('calc')->only();

  PASS  Tests\Unit\sampleTest
   わり算のテスト

  Tests:  1 passed

あとでテストを書きたいとき

test('あとで複雑な計算のテストを書く');
or
it('あとで複雑な計算のテストを書く');

   WARN  Tests\Unit\sampleTest
  r あとで複雑な計算のテストを書く  This test did not perform any assertions  /app/vendor/pestphp/pest/src/Factories/TestCaseFactory.php(185) : eval()'d code:4

  Tests:  1 risked
  Time:   0.26s

参考サイト
Pest - An elegant PHP Testing Framework | Skipping Tests

感想

便利だし、書きやすいのではないでしょうか。

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?