前言我一生的文章都会放在这里,我的博客,希望每一行代码,每一段文字,都能对你有所帮助。https://github.com/CrazyCodes...大家好,我是CrazyCodes。今天我们就来说说50%(不完全统计,不用担心比例?)的程序员觉得做数据库测试没有用。真正的考验才是最重要的。通常,一个需求应该先编写测试用例,然后再实现功能代码。如果开发前没有测试,那么可以选择写错误断言,用错误断言来验证代码是否符合预期。不是根据函数来写测试,这是写测试的逆向思维。什么是数据库测试?单元测试、设置、断言等条件可能很多人都玩过。但是,单元测试有局限性。现在大部分代码与数据库高度耦合,无法独立进行单元测试。比如要构建一个登录模块,一般逻辑如下。单元测试可以用在什么地方?在用户名中加入正则表达式(或规则)进行单元测试在用户密码中加入正则表达式(或规则)进行单元测试但是你是否发现无法使用单元测试做出预期的判断如果你发现验证用户是否存在?这时候就需要做数据库测试了。数据库测试其实很简单。一般过程如下。官方文档中的例子我们就不去看了,因为很多名词新手很难看懂。如果你准备好了,那么让我们先通过实操来试试数据库测试吧!准备测试数据在准备数据之前,我们先看一下PHPUnit为我们准备的几个测试数据文件的格式。FlatXMLDataSet(平面XML数据集)如上,上面的结构一般含义如下:用户表名,用户表用户名字段,用户表密码字段,创建用户表密码字段,用户表创建的每个字段以/>结尾,作为测试数据XMLDataSet(XML数据集)idusernamepasswordcreated1zhangsan1234562019-03-2517:15:23行><行><值>2值>lisi1234562019-03-2517:15:23
上面的XML和第一个XML表达式不同,但可能表示相同的内容。首先声明使用哪个表每一行数据的封装标签为标签一一对应标签,就像SQL语句UPDATEtable_nameSETfield1=new-value1,field2=new-value2相同什么?您是否需要创建太多测试数据?一个一个填会不会很累?那么下面就是你的好消息了。MySQLXML数据集(MySQLXMLDataset)单元可以直接使用MySQL导出的数据集。可以在MySQL控制台使用命令mysqldump--xml-t-u[username]--password=[password][database]>/path/to/file.xml这个是直接导出所有的表数据指定的图书馆。如果要指定库,可以做mysqldump--xml-t-u[username]--password=[password][database][table1][table2]>/path/to/file.xml导出的数据大致如下1zhangsan1234562019-03-2517:15:23YAMLDataSet(YAML数据集)user:-id:1username:"zhangsan"password:"123456"created:2019-03-2517:15:23-id:2用户名:"lisi"密码:"123456"created:2019-03-2517:15:23相信看到这里就不用跟你解释了吧。其他文件格式请参考https://phpunit.readthedocs.i...跟你喜欢哪种格式无关,看业务。通过上面的方法,我们可以看到类似于动态数据,比如创建的字段,我们不需要它是一个固定值,而是会随着时间变化的。遇到这种情况,只能让PHP这门世界上最好的语言来帮你了。[['id'=>1,'username'=>'zhangsan','password'=>'123456','created'=>'2019-03-2517:15:23'],['id'=>2,'用户名'=>'lisi','密码'=>'123456','created'=>'2019-03-2517:15:23'],],]);}}?>当然你需要实现一个自定义的数据库测试类,官方提供的就足够了,你也可以随意更改以达到你的测试目的$rows){$columns=[];如果(isset($rows[0])){$columns=array_keys($rows[0]);}$metaData=newPHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($tableName,$columns);$table=newPHPUnit_Extensions_Database_DataSet_DefaultTable($metaData);foreach($rowsAS$row){$table->addRow($row);}$this->tables[$tableName]=$table;}}protectedfunctioncreateIterator($reverse=false){返回新的PHPUnit_Extensions_Database_DataSet_DefaultTableIterator($this->tables,$reverse);}publicfunctiongetTable($tableName){if(!isset($this->tables[$tableName])){thrownewInvalidArgumentException("$tableName不是当前的表entdatabase.");}return$this->tables[$tableName];}}?>验证数据准备验证数据和测试数据格式一样,都是官方文档,比如你要结果插入数据库后为执行测试时,单元会比较xml文件和数据库中的数据。如果相同,通过测试。就这么简单。致谢完全掌握以上格式和官方文档中的demo和概念,才能把数据库掌握在自己手中。下一章,我会根据上面准备的数据准备一个“实战练习”,我已经帮你开始了,剩下的就靠你了。感谢您阅读本文,希望本文能对您有所帮助。