php - 如何使用 PHP SimpleTest 框架设置数据库测试

标签 php database unit-testing tdd simpletest

我正在使用 SimpleTest,一个基于 PHP 的单元测试框架。我正在测试将处理从数据库存储和检索网站评论的新代码。我不知道如何构建项目来测试数据库访问代码。

我正在寻找有关在 PHP 应用程序中测试数据库代码的最佳实践的任何建议。例子真的很棒。进一步阅读的网站很棒。

谢谢你。 :)

最佳答案

这是一个老问题,但我想我会添加一些我们在这方面的具体经验。

其他海报在技术上是正确的,这是一种集成测试形式,但从我的角度来看,MySQL 中的逻辑通常太多,无法在单元测试中删除。如果您像我们一样,拥有严重依赖 MySQL 的大型复杂服务(每个服务通常有多个表),那么拥有一个包含测试查询逻辑的健壮测试框架真的很方便。我们在单元测试中模拟了很多依赖项,但没有模拟 MySQL。

我们有一组包装 simpletest 的类来提供此功能。它的工作原理是这样的:

  • 创建每个数据库表的说明存储在 tests/etc/schemas/table.sql 的文件中。它包含模式数据以及测试希望找到的所有固定数据的插入。
  • 每个需要数据库的测试都会扩展一个 Test_DbCase 类,该类提供构建表的功能。
  • 引导类负责在构造和析构时创建和删除数据库。
  • 在运行时,测试在setUp方法中调用loadTables('foo', 'bar')来执行foo.sql中的sql命令bar.sql.
  • 针对固定数据运行测试..其余的是显而易见的。

我们拥有的另一个工具是 bash 脚本,它可以更轻松地创建 table.sql 文件。这真的很方便,否则我们将手动编写 SQL - 您可以使用一组现有的表,在 MySQL 中设置所有数据,然后将其导出以创建基本的测试文件。

这对我们来说非常有效,尽管我们最终不得不自己滚动很多。

关于php - 如何使用 PHP SimpleTest 框架设置数据库测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/175153/

相关文章:

android - 用于替换调试版本的签名应用程序

unit-testing - 如何在 'rails new app --skip-test-unit' 之后重新启用 Rails 4 中的 Test::Unit

java - 用户输入的单元测试 - Java

javascript - 在 HTML 中动态向表添加行

php - 在 php 中重命名文件名(波斯语/波斯语/阿拉伯语)

php - 我的 php 搜索引擎代码没有给我结果

php - jquery 不使用 if 语句

Android SQLite 数据库 : SQLiteDiskIOException: disk I/O error (code 1802)

javascript - 从 FORM 访问 HTML 元素的 JavaScript 函数的单元测试用例

php - php restore_error_handler无法正常工作