PHPUnit実践二(ライフサイクル)
このチュートリアルのすべてのPHPUnitテストは、
PHPUnitはファイルクラスのライフサイクルをテストします
PHPUnitロードメカニズムの理解(Lumen版) PHPUnit自動テストファイルは自動的に導入(include file) をロードします. PHPUnitはsetUpメソッドを起動し、LumenでsetUpを書き換え、bootstrap/appをロードした.php app.phpはcomposerのautoloadをロードし、プロジェクトのすべての自動ロード環境がありますが、testsディレクトリ は含まれていません.
ここでは、独自の自動ロードクラスを構築する必要があることを導入しました.
testsの自動ロードを追加
testsのテスト例に次のような構造を作成する必要があります.
tests自動ロードファイルコード
phpunit.xml
自動ロード構成bootstrapファイル
プロセステストコード
TestCase.php
PipeTestプロセスコード
うんてん
運転出力
プロセス出力の整理
まとめ
setUpBeforeClassからロードされたテストクラスファイルで、このロードは1回のみです.
各テストメソッドが実行するプロセス:setup->assertPreConditions->テストメソッド->[assert成功実行:assertPostConditions]->tearDown->[assert実行失敗:onNotSuccessfulTest、このメソッドはエラーを投げ出す必要があります]
このテストクラスファイル実行tearDownAfterClass終了
リファレンス
PHPUnit 6.5公式文書
PHPUnit6.5.9
バージョン、Lumen 5.5
フレームワークに基づいています.PHPUnitはファイルクラスのライフサイクルをテストします
PHPUnitロードメカニズムの理解(Lumen版)
ここでは、独自の自動ロードクラスを構築する必要があることを導入しました.
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公式文書