单元测试 - 动态/相关存储库的挑战

时间:2010-10-22 13:36:01

标签: asp.net-mvc unit-testing repository

我有一些控制器,每个控制器都有一个带有单元测试的测试类。每个单元测试都会调用一个操作,并验证该操作是否处理给定的方案。

测试类有一个安装例程,可以实例化一些虚假存储库和其他虚假对象。虚假存储库具有静态集合,存储库方法/函数可以对其进行操作。

它运作良好,但我遇到了一些挑战:

  • 当一个假集合中的实体引用另一个假集合中的实体时,存储库构造函数中的代码会爆炸并变得难以管理

  • 当单元测试调用修改虚假存储库数据的操作时,静态集合会更改状态,使得在其他单元测试中几乎不可能对相同的数据进行操作

所以我有两个问题可能需要您解释一般方法:

  1. 如何为引用其他假冒集合/实体的实体设置虚假集合?

  2. 您的虚假存储库是否支持更新/插入/删除操作?如果是这样,您如何防止一个单元测试的更改影响另一个单元测试?

2 个答案:

答案 0 :(得分:3)

只要您的存储库使用接口进行抽象,您就可以使用模拟对象框架生成虚假存储库并将其注入正在测试的控制器中。以下是一些受欢迎的选择:

答案 1 :(得分:1)

关于第2点,为什么不在你的单元测试类(你做的)的Setup函数中设置虚假存储库,并使用TearDown重置每个存储库的状态测试。

(这些是特定于NUnit的属性,因此如果其他框架具有相似的功能,我无法发表评论。)