【发布时间】:2014-11-16 14:44:47
【问题描述】:
首先,让我们在这里处理术语。我搜索的所有内容都说:“单元测试不会触及数据库!”我不想要单元测试。我想要一个测试,当我将数据发送到数据库时,我知道它正确地保存了它(以及测试其他 crud 操作)。我有一个存储库层,它基本上接受 DTO,然后将该 DTO 映射到实体框架模型,然后将该模型保存到数据库中。
我需要能够确保向这些方法发送 DTO 实际上是保存到数据库中。
存储库上的示例方法签名是:
public bool Save(SomeObjectDTO someObject)
我只需要测试这个方法调用是否返回true。
设置测试的最佳方法是什么?我调用的方法是保存到数据库的方法?
此外,是否有建立空白测试数据库的标准方法?如果当我点击“运行测试”时它会构建一个空数据库,用必要的初始数据填充它,然后执行所有 CRUD 操作(我所有的存储库调用)以查看它们都像他们一样保存,那就太好了应该是。
如果这个问题已经得到解答,我深表歉意,但是我搜索的所有内容要么有人说你不应该测试数据库调用,要么有人谈论在这里没有真正用处的模拟。
我只是想要一个关于如何设置这些类型的测试的示例和/或标准做法。
【问题讨论】:
-
我认为您必须自己编写。编写一个在你调用你的 repo 上的 CRUD 操作之后读取的类。测试数据实际上进入数据库的情况并不常见。大多数人进行测试以查看特定方法和调用是否返回所需的数据。
-
“不接触数据库”与你的单元测试是一个愚蠢的规则 IMO,并且论点是语义 - 如果你必须将数据库测试留给集成测试,但真正关心的是你的测试访问可能导致他们行为不可预测的共享资源(从而否定测试的好处)。
标签: c# database entity-framework testing