PHPUnit実践二(ライフサイクル)


このチュートリアルのすべてのPHPUnitテストは、PHPUnit6.5.9バージョン、Lumen 5.5フレームワークに基づいています.
PHPUnitはファイルクラスのライフサイクルをテストします
PHPUnitロードメカニズムの理解(Lumen版)
  • PHPUnit自動テストファイルは自動的に導入(include file)
  • をロードします.
  • PHPUnitはsetUpメソッドを起動し、LumenでsetUpを書き換え、bootstrap/appをロードした.php
  • app.phpはcomposerのautoloadをロードし、プロジェクトのすべての自動ロード環境がありますが、testsディレクトリ
  • は含まれていません.
    ここでは、独自の自動ロードクラスを構築する必要があることを導入しました.
    testsの自動ロードを追加
    testsのテスト例に次のような構造を作成する必要があります.
    ├── BaseCase.php    Lumen       ,              ,     
    ├── bootstrap.php tests      
    ├── Cases       
    │   └── Demo     
    │       ├── logs       
    │       ├── PipeTest.php PHPUnit      
    │       ├── phpunit.xml phpunit    xml
    │       └── README.md          
    ├── ExampleTest.php      demo
    └── TestCase.php Lumen       

    tests自動ロードファイルコード

    phpunit.xml
    自動ロード構成bootstrapファイル
    
    
    
    

    プロセステストコード
    TestCase.php
    #            Test
    namespace Test;

    PipeTestプロセスコード
    ");
        }
    
        public function setUp()
        {
            fwrite(STDOUT, __METHOD__ . "
    "); } /** * ,setUp */ protected function assertPreConditions() { fwrite(STDOUT, __METHOD__ . "
    "); } public function testOne() { fwrite(STDOUT, __METHOD__ . "
    "); $this-?>assertTrue(true); } public function testTwo() { fwrite(STDOUT, __METHOD__ . "
    "); // // assert , $this->assertArrayHasKey('d', ['d'=>1, 'e'=>2]); $this->assertTrue(false); } public function testThree() { fwrite(STDOUT, __METHOD__ . "
    "); $this->assertTrue(false); } public function testFour() { fwrite(STDOUT, __METHOD__ . "
    "); } /** * ,tearDown */ protected function assertPostConditions() { fwrite(STDOUT, __METHOD__ . "
    "); } public function tearDown() { fwrite(STDOUT, __METHOD__ . "
    "); } public static function tearDownAfterClass() { fwrite(STDOUT, __METHOD__ . "
    "); } /** * * , , */ public function onNotSuccessfulTest(\Throwable $e) { fwrite(STDOUT, __METHOD__ . "
    "); // , , throw $e; } }

    うんてん
    #     vendor/bin       PATH
    cd tests/Demo
    ../../../vendor/bin/phpunit

    運転出力
    PHPUnit 6.5.9 by Sebastian Bergmann and contributors.
    
    Test\Cases\Demo\PipeTest::setUpBeforeClass
    Test\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testOne
    Test\Cases\Demo\PipeTest::assertPostConditions
    Test\Cases\Demo\PipeTest::tearDown
    .Test\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testTwo
    Test\Cases\Demo\PipeTest::tearDown
    Test\Cases\Demo\PipeTest::onNotSuccessfulTest
    FTest\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testThree
    Test\Cases\Demo\PipeTest::tearDown
    Test\Cases\Demo\PipeTest::onNotSuccessfulTest
    FTest\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testFour
    Test\Cases\Demo\PipeTest::assertPostConditions
    Test\Cases\Demo\PipeTest::tearDown
    R                                                                4 / 4 (100%)Test\Cases\Demo\PipeTest::tearDownAfterClass
    
    
    Time: 1.29 seconds, Memory: 6.00MB
    
    There were 2 failures:
    
    1) Test\Cases\Demo\PipeTest::testTwo
    Failed asserting that false is true.
    
    /xxx/tests/Cases/Demo/PipeTest.php:47
    
    2) Test\Cases\Demo\PipeTest::testThree
    Failed asserting that false is true.
    
    /xxx/tests/Cases/Demo/PipeTest.php:53
    
    --
    
    There was 1 risky test:
    
    1) Test\Cases\Demo\PipeTest::testFour
    This test did not perform any assertions
    
    FAILURES!
    Tests: 4, Assertions: 4, Failures: 2, Risky: 1.
    
    Generating code coverage report in HTML format ... done

    プロセス出力の整理
    Test\Cases\Demo\PipeTest::setUpBeforeClass
    Test\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testOne
    Test\Cases\Demo\PipeTest::assertPostConditions
    Test\Cases\Demo\PipeTest::tearDown
    Test\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testTwo
    Test\Cases\Demo\PipeTest::tearDown
    Test\Cases\Demo\PipeTest::onNotSuccessfulTest
    Test\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testThree
    Test\Cases\Demo\PipeTest::tearDown
    Test\Cases\Demo\PipeTest::onNotSuccessfulTest
    Test\Cases\Demo\PipeTest::setUp
    Test\Cases\Demo\PipeTest::assertPreConditions
    Test\Cases\Demo\PipeTest::testFour
    Test\Cases\Demo\PipeTest::assertPostConditions
    Test\Cases\Demo\PipeTest::tearDown
    Test\Cases\Demo\PipeTest::tearDownAfterClass

    まとめ
    setUpBeforeClassからロードされたテストクラスファイルで、このロードは1回のみです.
    各テストメソッドが実行するプロセス:setup->assertPreConditions->テストメソッド->[assert成功実行:assertPostConditions]->tearDown->[assert実行失敗:onNotSuccessfulTest、このメソッドはエラーを投げ出す必要があります]
    このテストクラスファイル実行tearDownAfterClass終了
    リファレンス
    PHPUnit 6.5公式文書