【问题标题】:How should I unit-test a simple CRUD-class?我应该如何对一个简单的 CRUD 类进行单元测试?
【发布时间】:2009-04-17 17:43:19
【问题描述】:

我现在正在尝试在 VS2008 中使用单元测试做非常非常简单的事情,以便开始并体验一下。我想我已经测试了小型非数据库的东西,但现在我想开始测试我真正的解决方案 - 这几乎总是 CRUD-heavy。

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

以下是我在没有任何关于该主题的真正知识的情况下所能想到的。这是这样做的方式,还是......我应该如何处理这个?很酷(但请简单)的参考也非常受欢迎。

创建

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

阅读

  1. 创建新产品
  2. 调用选择方法
  3. 确保产品名称与我在创建时提供的名称一致
  4. 删除产品

更新

  1. 创建新产品
  2. 更新上面的一些字段
  3. 选择产品
  4. 验证某些字段是否匹配
  5. 删除产品

删除

  1. 创建新产品,保留 ProductID
  2. 删除产品(清理 4 号通道!)
  3. 检查这个Productid的产品是否还在表中?

编辑:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    3) 您的删除将因某些丢失的外键关系或依赖关系而失败,然后垃圾数据将留在您的数据库中。然后这些垃圾数据将导致其他测试失败。

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

    【讨论】:

      【解决方案2】:

      我发现基本上按照您的概述进行操作效果最好。但是,我倾向于在一个方法中创建一条记录,但将该记录的 id 值存储在私有类变量中,然后在每个方法中取回(读取)它,而不是将创建事件拆分到每个操作中。所以,我有一个 Read 断言方法,然后是另一个 Update 断言方法,最后是一个 Delete 断言方法。

      不过,您在上面概述的内容非常详尽。但最大的问题是,如果您的删除方法在您的读取断言方法中失败,那么您可能会误以为您的读取功能已损坏,而实际上删除功能已被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 2020-11-06
        • 2013-07-16
        相关资源
        最近更新 更多