2011-12-10 52 views
2

These似乎没有太大的帮助,所以我发布。连接到MySQL数据库的单元测试PHP API

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

更好的方法的任何想法?我都是耳朵...

回答

1

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

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

1

这是分期/ QA环境的明确候选人。然后,你可以保持一个.sql文件,为你提供你的虚拟数据集,并且可以迅速对它进行核实/修改。

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

1

使用三种数据库环境:Development,Testing/StagingProduction

当然,生产中的模式应该与测试/登台和开发一样,减去实际在dev中进行的更改。

符合上述要求,请为您的数据库连接提供三个配置文件。即使你在本地工作,并且需要在一台机器上同时开发和说明数据库,它也应该是可以的,但是如果你可以将它们全部分开(只要你在可以负担得起的企业环境中工作,或者如果你至少有其他部署为测试服务器)

在实现这种安装的情况下,您只需确保将dev更改传播到分段,并且您有三个配置文件。最好还有三个单独的文件夹用于您的代码。如果您使用的是Windows,那么您可以创建一个批处理文件,以在使用您的开发文件覆盖文件之前自动创建备份(减去配置;如果您进行更改,则手动执行)

然后,当您需要测试模拟生产环境应该是什么的东西,你只需要运行批处理文件,然后访问你的临时主机来测试。

0

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

我的问题,为什么每次PHP代码发生变化时,甚至会针对数据库运行单元测试?

你有没有写你的代码层(多层)?

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

1

我想和你一样做同样的事情。

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

您必须编写两个方法:getConnection()和getDataset()。您可以设置自己的连接,并且数据集可以是XML文件,包含一些静态数据(或真实子查询)。该方法将截断所选表格,在数据集中插入值,然后将模型层连接设置为getConnection()以及它在静态数据库中操作的所有操作。 然后,您可以声明表,声明数据集,声明结果数,全部用于比较数据库中操作的成功。

最后,PHPUnit会将您的数据库恢复到原始状态。

有一个很好的和有趣的介绍here说明一些允许的方法。