Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单元测试连接MySQL数据库的PHP API_Php_Mysql_Unit Testing_Debugging_Api - Fatal编程技术网

单元测试连接MySQL数据库的PHP API

单元测试连接MySQL数据库的PHP API,php,mysql,unit-testing,debugging,api,Php,Mysql,Unit Testing,Debugging,Api,似乎帮不了什么忙,所以我发了一个帖子 我有一个PHP API,可以进行MySQL插入、更新、选择等操作。基本上,每当我更改PHP代码进行测试时,我都必须使用假数据集(因为我不想损坏真实数据),插入特定值,运行脚本,查看是否进行了必要的插入和选择,然后删除刚才添加的所有值并恢复数据库等,并在调试时重复。这是可行的,但需要永远 有没有更好的方法?我洗耳恭听……您是否在生产和测试中使用相同的数据库 如果是,切换到单独的db,仅用于测试数据。测试套件运行后,您可以删除整个数据库。使用MySQL的命令行工

似乎帮不了什么忙,所以我发了一个帖子

我有一个PHP API,可以进行MySQL插入、更新、选择等操作。基本上,每当我更改PHP代码进行测试时,我都必须使用假数据集(因为我不想损坏真实数据),插入特定值,运行脚本,查看是否进行了必要的插入和选择,然后删除刚才添加的所有值并恢复数据库等,并在调试时重复。这是可行的,但需要永远


有没有更好的方法?我洗耳恭听……

您是否在生产和测试中使用相同的数据库


如果是,切换到单独的db,仅用于测试数据。测试套件运行后,您可以删除整个数据库。使用MySQL的命令行工具使用干净的测试数据执行大容量恢复。

这绝对适合于登台/QA环境。然后,您可以保留一个.sql文件,该文件为您提供虚拟数据集,并可以快速地对其进行核爆/修补


如果您正在寻找实现此功能的方法,我建议在虚拟机中镜像您的生产环境。

使用三种数据库环境:
开发
测试/暂存
生产

当然,生产中的模式应该与测试/登台以及开发中的模式相同,减去您在开发中实际进行的更改

根据上述内容,为数据库连接提供三个配置文件。即使您在本地工作,并且需要在一台计算机上同时拥有开发和声明数据库,也应该可以,但是如果您可以将它们全部分离(前提是您在一个能够负担得起的公司环境中工作,或者如果您至少有其他框可以部署为测试服务器)

实现了这种设置之后,您真正需要做的就是确保dev更改被传播到staging,并且您有三个配置文件。最好还有三个单独的文件夹存放代码。如果您使用的是windows,那么您可以创建一个批处理文件,以便在使用您的开发人员文件覆盖这些文件之前在暂存中自动创建备份(减去配置;如果您进行了更改,请手动执行此操作)


然后,当您需要测试一些模拟生产环境的东西时,您只需运行批处理文件,然后访问临时主机进行测试。

我想我理解您关于PHP代码更改的问题

我的问题是,为什么每次PHP代码发生变化时都要对数据库运行单元测试

您是否没有分层(多层)编写代码


如果有,则用内存中的数据存储替换数据库。

我正在尝试做与您相同的事情

我使用PHPUnit和类找到了使用PDO连接的代码的最佳解决方案

必须编写两个方法:getConnection()和getDataset()。您可以设置自己的连接,数据集可以是一个XML文件,带有一些静态数据(或实子查询)。该方法将截断所选表,在数据集中插入值,然后将模型层连接设置为getConnection(),并将其在静态数据库中操作的所有操作。 然后,您可以断言表、断言数据集、断言结果数,所有这些都是为了比较您在数据库中操作的成功与否

最后,PHPUnit将把数据库恢复到原始状态

有一个好的和有趣的介绍,说明了一些允许的方法