sqlite - 使用内存中的 sqlite DB 加速单元测试时避免 DB 依赖的建议

标签 sqlite unit-testing pdo phpunit database-testing

我一直在使用sqlite::memory:对于单元测试:它很快,并且使测试清理自动化。但我担心我的测试可能会由于 SQL 服务器的假设而丢失错误。 (这个特定的代码应该是 DB 中立的,但实际上它必须与 MySQL 一起工作。)

作为一个具体示例,我认为 sqlite 的日期字符串输入存储为字符串 (*),因此它们以完全相同的格式返回给我。而在 MySQL 中,它们似乎被解析、规范化并以一致的格式返回。我更担心的是我没有意识到存在差异。

处理这个问题的最佳方法是什么?例如。也对 mysql 重复所有单元测试(慢 - 有没有办法制作内存中的 MySQL DB?)。只是针对一些关键领域进行mysql测试?依靠使用 MySQL 的功能测试(这是我目前的方法,但覆盖范围更广)。还有什么我没有想到的?

*:如果我给出“2012-12-25 09:12:34”,我会得到那个确切的字符串。如果我给出“2012-12-25 09:12:34 UTC”,我会返回那个确切的字符串(即这次的时区)。如果我给“2012-12-25 09:12:34 hello world”,我会返回“2012-12-25 09:12:34 hello world”:-(

在这种特殊情况下,我使用的是 PHP、PDO 和 PHPUnit。我追求与语言无关的策略,但值得注意的是,PDO 是一个非常薄的抽象,更多地与抽象连接字符串和低级 API 调用有关。它不会尝试抽象数据库之间的数据类型差异。

最佳答案

如果你想测试 MySQL 特定的 SQL 细节,你只需要在 MySQL 上进行测试。

MySQL 有 MEMORY storage engine ,但这与其他引擎并不完全兼容。
您应该将数据库放在 RAM 磁盘 (tmpfs) 上。

SQLite 没有专用的 data types for dates/times .

关于sqlite - 使用内存中的 sqlite DB 加速单元测试时避免 DB 依赖的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423613/

相关文章:

php - 使用 PDO、准备好的语句和用 bindParam 替换标记来更新 MySQL;收到 'variables don' t 匹配 token 错误

powershell - SQLite3 不适用于 Powershell

php - 在 MySQL 中将大约 100 个值从一个表存档到另一个表的最佳方法?

php - PDO(PHP 数据对象)的缺点

c# - 异步不会在单元测试中的同一线程上继续

unit-testing - Scala - 单元测试设置(使用访问修饰符限定符?)

unit-testing - java.lang.NoClassDefFoundError : org/objenesis/ObjenesisStd with Mockito 错误

iphone - 如何在 iPhone 上打开加密的 SQLITE 数据库?

sqlite - 如何编写sqlite命令以选择不同的记录?

ios - ITMS-90809:不推荐使用的API使用情况(UIWebView)