当前位置: 首页 > 后端技术 > PHP

PHPUnit实战2(生命周期)

时间:2023-03-29 17:51:11 PHP

本系列教程所有PHPUnit测试均基于PHPUnit6.5.9版本,Lumen5.5框架PHPUnit测试一个文件类的生命周期理解PHPUnit加载机制(Lumen版)PHPUnit自动测试文件会自动加载导入(includefile)PHPUnit启动setUp方法,在Lumen中重写setUp,加载bootstrap/app.phpapp.php并加载composer的autoload,这样你项目的所有自动加载环境都可用,但是目前还没有包含tests目录我们已经介绍了我们需要构建自己的自动加载类来增加测试的自动加载。我们需要为被测的测试用例创建一个类似于下面的结构├──BaseCase.php重写了Lumen基类的测试基类供我们使用这个基类作为测试基类,将稍后解释├──bootstrap.php测试自动加载文件├──Cases测试用例目录│└──Demo测试模块│├──logs日志输出目录│├──PipeTest.phpPHPUnit进程测试用例│├──phpunit.xmlphpunit配置文件xml│└──README.md本模块测试用例说明├──ExampleTest.php最原始的测试demo└──TestCase.phpLumen自带的测试基类测试自动加载文件代码进程测试代码TestCase.php#代码头添加命令空间TestnamespaceTest;PipeTest进程代码assertTrue(真);}publicfunctiontestTwo(){fwrite(STDOUT,__METHOD__."\n");//交换两者的顺序就可以看到效果了。//如果正常执行成功,assert可以继续执行。如果失败,则跳出方法$this->assertArrayHasKey('d',['d'=>1,'e'=>2]);$this->assertTrue(false);}publicfunctiontestThree(){fwrite(STDOUT,__METHOD__."\n");$this->assertTrue(false);}公共函数testFour(){fwrite(STDOUT,__METHOD__."\n");}/***测试方法成功后执行后,在tearDown之前*/protectedfunctionassertPostConditions(){fwrite(STDOUT,__METHOD__."\n");}publicfunctiontearDown(){fwrite(STDOUT,__METHOD__."\n");}publicstaticfunctiontearDownAfterClass(){fwrite(STDOUT,__METHOD__."\n");}/***不成功后的拦截方法*必须重新抛出错误,如果没有抛出错误,则认为断言成功*/publicfunctiononNotSuccessfulTest(\Throwable$e){fwrite(STDOUT,__METHOD__."\n");//必须重新抛出错误,如果没有抛出错误,断言将被视为成功throw$e;}}Run#可以在环境变量PATH中添加vendor/bincdtests/Demo../../../vendor/bin/phpunitrunoutputPHPUnit6.5.9bySebastianBergmannandcontributors.Test\Cases\Demo\PipeTest::setUpBeforeClassTest\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testOneTest\Cases\Demo\PipeTest::assertPostConditionsTest\Cases\Demo\PipeTest::tearDown.测试\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testTwoTest\Cases\Demo\PipeTest::tearDownTest\Cases\Demo\PipeTest::onNotSuccessfulTestFTest\Cases\Demo\PipeTest::测试::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testThreeTest\Cases\Demo\PipeTest::tearDownTest\Cases\Demo\PipeTest::onNotSuccessfulTestFTest\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testFourTest\Cases\Demo\PipeTest::assertPostConditionsTest\Cases\Demo\PipeTest::tearDownR4/4(100%)Test\Cases\Demo\PipeTest::tearDownAfterClassTime:1.29seconds,Memory:6.00MBTherewere2failures:1)Test\Cases\Demo\PipeTest::testTwoFailedassertingthatfalseistrue./xxx/tests/Cases/Demo/PipeTest.php:472)Test\Cases\Demo\PipeTest::testThreeFailed断言false为真。/xxx/tests/Cases/Demo/PipeTest.php:53--有1个风险测试:1)Test\Cases\Demo\PipeTest::testFourThistestdidnotperformanyassertionsFAILURES!Tests:4,Assertions:4,Failures:2,Risky:1.GeneratingcodecoveragereportinHTMLformat...done整理流程输出Test\Cases\Demo\PipeTest::setUpBeforeClassTest\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testOneTest\Cases\Demo\PipeTest::assertPostConditionsTest\Cases\Demo\PipeTest::tearDownTest\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testTwoTest\Cases\Demo\PipeTest::tearDownTest\Cases\Demo\PipeTest::onNotSuccessfulTestTest\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testThreeTest\Cases\Demo\PipeTest::tearDownTest\Cases\Demo\PipeTest::测试::onNotSuccessfulTestTest\Cases\Demo\PipeTest::setUpTest\Cases\Demo\PipeTest::assertPreConditionsTest\Cases\Demo\PipeTest::testFourTest\Cases\Demo\PipeT::测试est::assertPostConditionsTest\Cases\Demo\PipeTest::tearDownTest\Cases\Demo\PipeTest::tearDownAfterClass总结一个测试类文件,从setUpBeforeClass加载,只加载一次。每个测试方法都会经历的过程:setUp->assertPreConditions->Testmethod->[assert执行成功:assertPostConditions]->tearDown->[assert执行失败:onNotSuccessfulTest,且该方法需要抛出错误]本次测试class文件执行tearDownAfterClass结束。参考PHPUnit6.5官方文档