我应该如何对一个简单的CRUD类进行单元测试?

时间:2009-04-17 17:43:20

标签: vb.net visual-studio unit-testing

我现在正试图在VS2008中进行非常简单的单元测试,以便开始并感受到这一点。我想我已经测试了一些小的非数据库内容,但现在我想开始测试我真正的解决方案 - 几乎总是CRUD很重。

因此,假设我在数据访问层中有一个类,它为产品执行标准的CRUD。我想测试产品上的每个方法。

以下是我对此主题没有任何实际知识的想法。这是做到这一点的方式,还是......我该如何处理?很酷(但很简单,请)参考也非常受欢迎。

创建

  1. 提供一些相关参数(产品名称等)
  2. 检查是否已返回身份。
  3. 删除产品(清理)。
  4. 读取

    1. 制作新产品
    2. 调用select-method
    3. 确保产品名称与我在创建时提供的名称相匹配
    4. 删除produkt
    5. 更新

      1. 制作新产品
      2. 更新一些字段
      3. 选择产品
      4. 验证某些字段是否匹配
      5. 删除产品
      6. 删除

        1. 创建新产品,保留ProductID
        2. 删除产品(清洁过道4!)
        3. 检查具有此Productid的产品是否仍在表中?
        4. 编辑:

          ...或者我应该简单地创建一个测试,测试所有这些东西?

2 个答案:

答案 0 :(得分:5)

我一直走在这条路上,以下是你要遇到的所有问题:

1)这对于一条记录看起来不错,但是当您需要4条其他记录来创建该记录时会发生什么?您最终创建了4条记录来测试插入您的一条记录。这会导致以下所有问题。

2)每次测试创建和删除4-5条记录很慢,它会慢慢加起来并且运行测试需要45分钟(相信我,我在那里)。慢速测试意味着你永远不会运行它们,这意味着它们将在大部分时间被打破并且无用。

3)对于某些错过的外键关系或依赖关系,您的删除将失败,然后垃圾数据将保留在您的数据库中。此垃圾数据将导致其他测试失败。

鉴于此,我会恳请你考虑两件事。第一种是尝试使用ORM而不是自己编写所有这些逻辑。然后,您只需要测试映射文件(甚至更少,具体取决于您使用的ORM)或查看模拟,这样您就可以隔离数据访问代码中的逻辑,直接访问数据库。

答案 1 :(得分:0)

我发现最好基本上按照你所概述的方式做。但是,我不是将create事件分成每个操作,而是倾向于在一个方法中创建一个记录,但是将该记录的id值存储在私有类变量中,然后我在每个方法内部取回(读取)。那么,我有一个Read assert方法,然后是另一个Update assert方法,最后是一个Delete assert方法。

尽管如此,您上面概述的内容非常彻底。但最大的问题是,如果你的读取断言方法中的删除方法失败,那么你可能会误导你认为你的读取功能被破坏了,实际上删除了删除功能。