Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自作して理解するxUnit / self-made-xunit

自作して理解するxUnit / self-made-xunit

PHPカンファレンス北海道2019で発表したxUnitを自作することで理解するというトークです

Kazuki Higashiguchi

September 21, 2019
Tweet

More Decks by Kazuki Higashiguchi

Other Decks in Technology

Transcript

  1. © - BASE, Inc. : @hgsgtk Who am I? 東⼝

    和暉 ( Higashiguchi Kazuki ) Back-end Engineer (Go, PHP, Python ) BASE BANK, Inc. (BASE, Inc.) / Dev Division / Tech Lead
  2. © - BASE, Inc. xUnitファミリーが持っている機能 • Test Method • Assertion

    Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
  3. © - BASE, Inc. 今⽇⾃作するもの • Test Method • Assertion

    Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
  4. © - BASE, Inc. xUnitファミリーが持っている機能 • Test Method • Assertion

    Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
  5. © - BASE, Inc. (補⾜)クラスを集める • get_declared_classes() • 定義済みのクラスの名前を配列として返す •

    ReflectionClass::isUserDefined() • 内部クラスかどうかを検査 • ReflectionClass::getParentClass() • 親クラスの情報を取得 https://www.php.net/manual/ja/reflectionclass.isuserdefined.php https://www.php.net/manual/ja/function.get-declared-classes.php https://www.php.net/manual/ja/reflectionclass.getparentclass.php
  6. © - BASE, Inc. (補⾜)関数を集める • ReflectionClass::getMethods • クラスのメソッド名を取得 •

    ReflectionMethod::IS_PUBLIC etc https://www.php.net/manual/ja/reflectionclass.getmethods.php
  7. © - BASE, Inc. xUnitを知る • Test Methodの⾒つけ⽅の⼤きく2つ • Test

    Discovery‧Test Enumeration • 多くのxUnitファミリーは前者、フレー ムワークがテストメソッドを⾒つける、 ユーザーが⼿動で登録しなくていい
  8. © - BASE, Inc. 今⽇⾃作するもの • Test Method • Assertion

    Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
  9. © - BASE, Inc. (補⾜)assert⽤の設定ディレクティブ • zend.assertions (default: ) •

    assert()を⽣成するか‧実⾏するか • 1 の場合、コードは⽣成され実⾏される • assert.exception (default: ) • アサーション失敗に指定したオブジェクトをス ロー • 指定なしだとAssertionError https://www.php.net/manual/ja/function.assert.php https://www.php.net/manual/ja/class.assertionerror.php
  10. © - BASE, Inc. (補⾜)assert⽤のオプション • 様々なassertフラグを設定できる • ASSERT_ACTIVE •

    ASSERT_WARNING • ASSERT_BAIL • ASSERT_QUIET_EVAL • ASSERT_CALLBACK https://www.php.net/manual/ja/function.assert-options.php
  11. © - BASE, Inc. まとめ • ⾃作すると、xUnitがどういうことをし てくれているか分かる(ex. Test Discovery)

    • テスティングフレームワークの提供者の 気持ちに近づき、ユーザーの僕らのテス トリテラシーも上がるのかもしれない
  12. © - BASE, Inc. Special Thanks: 参考資料 • PHPでテスティングフレームワークを実装する前 に知っておきたい勘所

    / @tadsan • https://www.youtube.com/ watch?v=o YY JnAOwU • sebastianbergmann/phpunit • https://github.com/sebastianbergmann/ phpunit