单元测试查询数据库的方法

时间:2017-03-21 21:11:41

标签: node.js mongodb unit-testing testing meteor

所以我创建了一个接受ID的函数,通过存储库从数据库内部查询数据库,根据不同的场景对数据做出返回的突变,然后我们返回数据。

我如何对此功能进行单元测试?   我是否会将存储库层上的find方法存根以返回数据,以便我不依赖于连接数据库?

1 个答案:

答案 0 :(得分:2)

我认为你只能对可以进行单元测试的代码进行单元测试。我对单元可测试代码的定义是展示这些属性的代码:

  1. 从输入中获取所需的一切
  2. 所有工作都是通过返回值(或抛出异常)来表达的
  3. 它不会产生任何副作用
  4. 您描述的代码违反#1,转到数据库。

    直接回答你的问题,你会模拟数据库调用,而mock会为你的函数提供预期的数据,这样你就可以改变它并将它与预期的输出进行比较。

    但我认为真正正确的答案是重构您的代码,应用单一责任原则。你正在测试的代码正在做两件事(转到数据库并改变结果),而不只做一件事。

    我会打破数据库部分并将其指定为Someone Else的Job。然后你的测试代码可以将该数据库结果作为输入,其唯一的工作就是改变该数据并返回结果。

    那将是,imho,使它可以单元测试。当你对它进行单元测试时,你根本不需要模拟数据库,因为你可以简单地编写你想改变的数据并为它提供函数。