所以我创建了一个接受ID的函数,通过存储库从数据库内部查询数据库,根据不同的场景对数据做出返回的突变,然后我们返回数据。
我如何对此功能进行单元测试? 我是否会将存储库层上的find方法存根以返回数据,以便我不依赖于连接数据库?
答案 0 :(得分:2)
我认为你只能对可以进行单元测试的代码进行单元测试。我对单元可测试代码的定义是展示这些属性的代码:
您描述的代码违反#1,转到数据库。
直接回答你的问题,你会模拟数据库调用,而mock会为你的函数提供预期的数据,这样你就可以改变它并将它与预期的输出进行比较。
但我认为真正正确的答案是重构您的代码,应用单一责任原则。你正在测试的代码正在做两件事(转到数据库并改变结果),而不只做一件事。
我会打破数据库部分并将其指定为Someone Else的Job。然后你的测试代码可以将该数据库结果作为输入,其唯一的工作就是改变该数据并返回结果。
那将是,imho,使它可以单元测试。当你对它进行单元测试时,你根本不需要模拟数据库,因为你可以简单地编写你想改变的数据并为它提供函数。