我一直在使用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 调用有关。它不会尝试抽象数据库之间的数据类型差异。