unit testing查询数据库的方法

所以我创build了一个接受ID的函数,通过数据库从数据库内部查询数据库,根据不同的场景返回数据,然后我们返回数据。

我将如何unit testing这个function? 我会存根据我的存储库层查找方法返回数据,所以我不依赖于连接数据库?

我会争辩说,你只能unit testingunit testing的代码。 我对单元可testing代码的定义是具有以下属性的代码:

  1. 它从input中获得所需的一切
  2. 所有的工作都是通过返回值(或抛出exception)
  3. 它不会产生任何副作用

你所描述的代码违反了#1,进入数据库。

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

但我认为真正正确的答案是重构你的代码,应用单一责任原则。 你testing的代码是做两件事(去数据库和变异的结果),而不是做一件事。

我会打破数据库部分,并指定为其他人的工作。 那么你的代码就可以把这个数据库结果作为input,它唯一的工作就是改变数据并返回结果。

这将是,恕我直言,使其unit testing。 而当你unit testing的时候,你根本不需要嘲笑数据库,因为你可以简单地写出你想要改变的数据并提供函数。