mongodb - 使用 Mocking 在 PHP 应用程序中测试 MongoDB 交互

标签 mongodb unit-testing mocking phpunit

有效使用 MongoDB 和 PHPUnit 的最佳实践是什么?我应该(或可以)使用什么来模拟访问 MongoDB 的对象? PHPUnit Mocker , Mockery , Phrophecy , Phactory

最佳答案

如果您查看 SQL 数据库的模拟数据,这里有很多意见。

  • 有些人建议使用内存中的 SQL 数据库。
  • 有些人只是 mock ORM 调用并假设 ORM 到 DB 部分已经过测试。
  • 有些人只是使用“本地”数据库进行单元测试,而忽略了整个“模拟”概念。

鉴于对 SQL 缺乏共识,您更不可能就 MongoDB 等新数据库达成共识。

我认为这里有一些重要的细节需要考虑。

  • 您是否在使用某种形式的 ORM/ODM?只是司机直接?
  • 您是否正在尝试模拟与数据库的所有通信?您是否要模拟 ODM?

如果您只是想模拟与 DB 的通信,那么理想的解决方案是 MongoDB 驱动程序的“假”实现。这可能需要大量工作,因为在编写驱动程序时从未考虑过“可模拟性”。

如果您有 ODM,那么您可以简单地模拟 ODM 调用并假设 ODM 正在执行其工作。理想情况下,ODM 应该提供一些可模拟的接口(interface),但情况并非总是如此。

再一次,这个答案归结为您真正计划测试什么以及您认为什么是好的单元测试。不幸的是,这些产品中的大多数仍然很新,因此在这个领域几乎没有指导。

关于mongodb - 使用 Mocking 在 PHP 应用程序中测试 MongoDB 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630595/

相关文章:

c++ - 如何告诉 Boost.Test 在第一个失败的测试用例上停止?

unit-testing - Grails单元测试应该失败奇怪的行为

c# - 如何使用 MOQ 框架在 c# 中模拟静态方法?

java - Mockito 在模拟的 Javalin 上下文上调用真实方法

javascript - 为什么我要从一个空的 mongodb 数据库中获取数据?

javascript - Mongoose find 和 findOne 返回整个集合

mongodb - 如何在字节数组中保存图像并在grails中将字节数组取回图像?

sql - 对于有竞争力的在线门票销售,您会建议什么数据库解决方案

ruby-on-rails - 你最喜欢的 ruby​​ 和 rails 测试 "gem(s)"或 "plugins"

unit-testing - 如何在 Rust 中模拟特定方法而不是所有方法?