【发布时间】:2017-03-22 07:33:05
【问题描述】:
所以我创建了一个接受 ID 的函数,通过存储库从返回的数据内部查询数据库,根据不同的场景对数据进行突变,然后我们返回数据。
如何对这个函数进行单元测试? 我会在我的存储库层上存根 find 方法以返回数据,这样我就不依赖于连接数据库了吗?
【问题讨论】:
标签: node.js mongodb unit-testing testing meteor
所以我创建了一个接受 ID 的函数,通过存储库从返回的数据内部查询数据库,根据不同的场景对数据进行突变,然后我们返回数据。
如何对这个函数进行单元测试? 我会在我的存储库层上存根 find 方法以返回数据,这样我就不依赖于连接数据库了吗?
【问题讨论】:
标签: node.js mongodb unit-testing testing meteor
我会争辩说,您只能对可单元测试的代码进行单元测试。我对单元可测试代码的定义是具有这些属性的代码:
你描述的代码违反了#1,通过访问数据库。
要直接回答您的问题,您可以模拟数据库调用,该模拟将为您的函数提供预期数据,以便您可以对其进行变异并将其与预期输出进行比较。
但我认为真正正确的答案是重构您的代码,应用单一职责原则。您的被测代码正在做两件事(访问数据库并改变结果),而不是只做一件事。
我会拆分数据库部分并将其指定为其他人的工作。那么您的被测代码可以将该数据库结果作为输入,其唯一工作就是改变该数据并返回结果。
恕我直言,这将使其可单元测试。当你对它进行单元测试时,你根本不需要模拟数据库,因为你可以简单地编写你想要变异的数据并为其提供函数。
【讨论】: