一直感觉PHP开发者没有追求PHP的质量,可能是PHP机制问题,大部分开发者总是认为浏览器访问没有问题,所以很多时候,在做PHP的时候开发,没有单元测试的概念。能不能追究一点?我也是一个PHP人,但同时我也讨厌那些不管事就不管的开发人员。作为开发人员,或者产品处理人员,你应该关注每一个细节,并且每次都做得更好。.但是做单元测试和质检需要一定的时间和人力,但是我可以保证你花在上面的时间绝对不会白费。这对您和项目来说一定是一件好事。品质提升,只要你愿意付出时间和精力去做。废话太多,简单说说phpunit,官网。由于我们习惯使用composer,所以我们也使用composer安装它。安装配置$composerrequirephpunit/phpunit-vvv安装phpunit后,会在vendor/bin目录下创建bin执行脚本,命名为phpunit,执行phpvendor/bin/phpunit执行测试脚本配置bin目录:{"config":{"bin":"bin"}}配置bin目录生成的目录,执行phpbin/phpunit脚本开始测试。phpunit可以配置在当前执行路径下添加一个配置文件phpunit.xml.dist或者phpunit.xml,内容如下:dir1dir2通过配置目录和初始化信息,脚本可以自动执行相应的测试用例。基本用法使用PHPUnit创建我们的测试用例:assertEquals(0,count($stack));array_push($stack,'foo');$this->assertEquals('foo',$stack[count($stack)-1]);$this->assertEquals(1,count($stack));$this->assertEquals('foo',array_pop($stack));$this->assertEquals(0,count($stack));}}类名需要以*Test结尾,继承PHPUnit_Framework_TestCase。需要测试的方法需要以test开头,表示是测试方法。通常,常用的测试无非就是“断言”。说白了,就是看生成的结果是否符合预期。如果是,则证明测试通过。否则失败,说明逻辑处理存在一定差异,导致不合规。预期的。更多测试使用方法可以参考官网用例:PHPUnit初始化当我们的测试对象继承PHPUnit时,初始化方法需要使用自身提供的setUp方法,代表类初始化。你可以在初始化方法中初始化一些资源,或者加载。除了上述基本测试外,数据库测试还应该关注动态数据。你需要测试它吗?如果是这样,你应该如何测试它?生产环境也需要这样测试?这个曾经困扰我的问题已经解决了。打开。答:在composer中有--no-dev选项,用于部署生产环境,防止测试环境的数据或代码跑到生产环境。而且生产环境中的数据库操作没有很高的权限。如果是这样,你就得回去好好想想了。每次测试时,dbunit都会重置数据。其实在生产环境中,是无法重置的。第一个是composer--no-dev没有执行权。如果是这样,则不允许清除数据库。如果生产环境不需要这些东西,应该怎么测试。其实要有一个模拟生产环境的测试环境来模拟生产环境测试是很有必要的。当所有的测试都OK,没有问题的时候,就可以发布到生产环境了。如果再严格一点,生产环境也需要一轮测试。$composerrequirephpunit/dbunit-vvv查看更多测试:host=127.0.0.1','用户','通过');返回$this->createDefaultDBConnection($pdo,':memory:');}/***@returnPHPUnit_Extensions_Database_DataSet_IDataSet*/publicfunctiongetDataSet(){return$this->createFlatXMLDataSet(dirname(__FILE__).'/_files/guestbook-seed.xml');}}getConnection方法是获取数据库连接,继承数据库测试后必须实现的方法,需要返回PHPUnit_Extensions_Database_DB_IDatabaseConnection对象,可以和上面一样写。getDataSet方法是创建数据库测试时自动填充、测试和删除的数据集。他执行的流程是每个测试用例都会被填充一次,保证不会被其他测试用例影响。当当前测试用例完成时,填充的数据将被截断。数据集支持多种方式,可以自定义数组、yml、xml,也可以根据自己的使用习惯自定义填充数据。可以看到数据集:点我执行脚本phpvendor/bin/phpunit然后去对应查看自己的数据表。有没有更多的填充数据?抽象出自己的数据库测试类很多时候,我们的业务可以描述为各种各样的东西,如果phpunit提供的数据库测试不够或者不够方便,就需要扩展自己的数据库测试来达到你想要的效果想。好在phpunit提供了灵活的扩展操作(当然,别人不会像你这么傻,写死。哈哈),我们可以很轻松的实现自己的数据库测试类。conn===null){if(self::$pdo==null){self::$pdo=newPDO('mysql::dbname=test;host=127.0.0.1','用户','通过');$this->conn=$this->createDefaultDBConnection(self::$pdo,':memory:');}返回$this->conn;}}至此,完成了最基础入门的单元测试和数据库测试。最终的数据库无非是检查数据的增删改查是否符合预期。因此,配置好数据库测试后,可以回到第一步,编写你的测试用例,断言测试。恭喜,你已经搭建了自己的单元测试环境。接下来要做的是提高易用性和测试覆盖率。我只能帮你走到这里,接下来的路,你自己走吧。