Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
使用内存中的sqlite DB加速单元测试时避免DB DEP的建议_Sqlite_Unit Testing_Pdo_Phpunit_Database Testing - Fatal编程技术网

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

使用内存中的sqlite DB加速单元测试时避免DB DEP的建议,sqlite,unit-testing,pdo,phpunit,database-testing,Sqlite,Unit Testing,Pdo,Phpunit,Database Testing,我一直在使用sqlite::memory:进行单元测试:它很快,可以自动清理测试。但我担心,由于SQL server的假设,我的测试可能会遗漏错误。这个特定的代码应该是与数据库无关的,但实际上它必须与MySQL一起工作 作为一个具体的例子,我认为sqlite的日期字符串输入被存储为字符串*,因此它们以完全相同的格式返回给我。而在MySQL中,它们似乎以一致的格式被解析、规范化和返回。我更担心的是,有些差异我没有意识到 处理这个问题的最佳方法是什么?例如,对mysql重复所有单元测试太慢-是否有办

我一直在使用sqlite::memory:进行单元测试:它很快,可以自动清理测试。但我担心,由于SQL server的假设,我的测试可能会遗漏错误。这个特定的代码应该是与数据库无关的,但实际上它必须与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具有相同的功能,但与其他引擎不完全兼容。 您应该将数据库放在RAM磁盘tmpfs上


SQLite没有专用的数据库。

如果要测试特定于MySQL的SQL详细信息,只需在MySQL上进行测试

MySQL具有相同的功能,但与其他引擎不完全兼容。 您应该将数据库放在RAM磁盘tmpfs上


SQLite没有专用的测试工具。

我们通常在我工作的地方做的是,将测试分为:

单元测试:非常快,在我的例子中使用内存数据库

集成测试:较慢,使用“真实”数据库,再加上其他运行时间较长的测试


在开发过程中,我们只运行单元测试。自动构建也会运行集成测试,但如果您愿意,您可以自己运行它们。

我们通常在我工作的地方做的是,将测试分成:

单元测试:非常快,在我的例子中使用内存数据库

集成测试:较慢,使用“真实”数据库,再加上其他运行时间较长的测试


在开发过程中,我们只运行单元测试。自动构建也运行集成测试,但如果您愿意,您可以自己运行。

Thomas,这正是我所做的,并建议其他人去做。但是你有没有遇到过冲突?你如何处理它们?例如,集成测试失败是因为通过了一个本应失败的单元测试。这种情况很少发生,以至于你们只能忍受痛苦吗?我并没有一个通用的解决方案。这还取决于项目:我所从事的一个项目存在并发问题,有时会导致集成测试失败,这是一个痛苦的过程。当然,我试图添加更快的单元测试并发现相同的问题,但它们通常不太“真实”。Thomas,这正是我所做的,并建议其他人做的。但是你有没有遇到过冲突?你如何处理它们?例如,集成测试失败是因为通过了一个本应失败的单元测试。这种情况很少发生,以至于你们只能忍受痛苦吗?我并没有一个通用的解决方案。这还取决于项目:我所从事的一个项目存在并发问题,有时会导致集成测试失败,这是一个痛苦的过程。当然,我试图添加更快的单元测试并发现相同的问题,但它们通常不太“真实”。使用数据库进行单元测试是一种矛盾修饰法。使用数据库进行单元测试是一种矛盾修饰法。