我已经遇到过关于dataprovider的单元测试的问题。实现这一目标的最佳方式是什么? 一种解决方案是将某些内容插入数据库并读取它以确保它符合预期。然后再次删除它。但这需要更多编码。 另一个解决方案是有一个额外的数据库,我可以测试。这也需要很多工作来实现它。 实现它的正确方法是什么?
答案 0 :(得分:2)
正如其他人所指出的,您所描述的内容称为集成测试。集成测试是你应该做的事情,但理解差异是很好的。
我前段时间写了一篇博文,解释了这些差异,并向您展示了在单元测试时删除外部依赖关系的方法:Unit Testing, hell or heaven?。
现在问你的问题。在针对数据库运行集成测试时,您有几个选择:
localdb
支持,这可以相对快速地完成。 之前我已经选择了几次交易范围而且效果很好。在编写这样的集成测试时,有一点非常重要,那就是确保测试不依赖于彼此。他们需要以测试运行员决定的任何顺序运行。
你还应该确保避免任何“魔术数字”。例如,您可能知道您的数据库包含3个人,因此在测试中添加一个人然后断言数据库中有四个人。对于您的测试读者(将在几天,几周或几个月内完成),这很难理解。确保您的测试是自我解释的,并且您不依赖于测试中不明显的外部状态。
答案 1 :(得分:1)
您无法对外部依赖项(如数据库连接)进行单元测试。有一个很好的帖子here关于为什么会这样。简而言之:应该测试外部依赖性,但这是集成测试,而不是单元测试。
答案 2 :(得分:0)
通常,在从代码调用数据库时,您会编写集成测试。如果你想编写单元测试,你应该看一下模拟框架。