9

当我在家发展时,我一直在努力推动自己的心态,以更倾向于 TDD 和一点 DDD。

我不明白的一件事是为什么你要创建一个假的存储库来测试?我并没有真正研究过它,但测试的想法肯定是帮助你的代码解耦(给你更多的灵活性),减少所需的代码并减少错误的数量。

那么有人可以填补我愚蠢的大脑为什么有些人喜欢测试假存储库吗?我会认为针对真实数据库进行测试是比创建虚假数据库更好的替代方法,因为这样您就知道它适用于您的真实世界数据存储。

4

3 回答 3

22

伪造的存储库允许您仅测试您的应用程序代码。

假存储库意味着自动化测试可以轻松地在存储库中设置已知状态。

假存储库将比真实数据库快几个数量级。

假存储库不能替代将包括您的数据库的系统测试。

于 2009-01-02T13:05:19.937 回答
7

在我看来,您测试伪造资源有两个非常重要的原因:

  • 当您针对慢速 I/O 或数据库进行模拟时,它可以使单元测试更快。如果您有一个小型测试套件,这可能看起来没什么,但是当您进行多达 +500 个单元测试时,它开始有所作为。在这样的数量下,针对数据库运行的测试将开始需要几秒钟的时间。程序员很懒惰,希望事情进展得很快,所以如果运行一个测试套件需要超过 10 秒,那么你将不再乐意进行 TDD。
  • 它强制您考虑您的代码设计以使更改更容易。如果您针对接口或抽象类进行了实现,那么通过契约和依赖注入进行设计也会变得更加容易。如果做得好,这样的设计可以更容易地遵守代码的更改。

唯一的缺点是显而易见的:

  • 你怎么能确定它真的有效?

...这就是集成测试的目的。

于 2009-01-02T13:18:11.237 回答
2

我赞成 Giraffe 的回答,但只想补充几点:

  • 每个开发人员都可以使用模拟/假存储库进行她/他自己的单元测试,而不会干扰其他开发人员在同一项目中所做的测试。

  • 使用本地模拟/伪造存储库增强了数据抽象层的用户,这是一种良好的设计实践。

例如,我使用了像 a 这样简单的东西HashMap来实现数据访问层的模拟。这使得每个单元测试都非常容易确保其目的所必需的条件准确存在,并验证在数据访问层上进行了正确的调用。

于 2009-01-02T14:28:01.000 回答