【问题标题】:Testing Line-of-Business (LOB) .NET Applications?测试业务线 (LOB) .NET 应用程序?
【发布时间】:2009-01-04 23:52:47
【问题描述】:

我想知道这里是否有人在单元测试 LOB 应用程序(通常是 CRUD)方面有经验。

我曾涉足 Visual Studio 中的内置单元测试工具,但我发现很难运行针对数据库的测试。由于数据发生了变化,再加上我对自己在做什么一无所知,因此似乎很难产生预期的结果并对其进行断言。此外,我什至听说您不应该对数据库运行单元测试......但是其他人是如何对 CRUD LOB 软件执行单元测试的呢?

我听说过很多关于 TDD 和与测试的持续集成,但似乎如果我什至不能从一开始就创建单元测试,我就不能真正使用这些方法。这是因为像记事本这样的产品很容易为……创建单元测试……你有一定数量的特性,这些特性应该总是产生相同的结果。但是对于 LOB 应用程序,您可以在测试环境中创建、删除或修改诸如销售订单之类的内容。

任何见解将不胜感激!

【问题讨论】:

    标签: .net unit-testing testing


    【解决方案1】:

    通常使用 CRUD,您将需要 Mock 或使用 IOC 容器作为数据访问层,这样您就不必总是访问数据库和“可变数据”。

    对于单元测试,您总是期望相同的值,因此将其连接到数据库通常会导致问题。

    查看 RhinoMocks 或 Inversion Of Control Containers。

    【讨论】:

      【解决方案2】:

      我创建了一个基线数据库并使用 dbUnit 将其导出到一组 XML 文件中。测试的第一遍是清除并使用基线填充测试数据库。之后,您应该能够根据预期值断言单元测试。

      【讨论】:

        【解决方案3】:

        自动化测试是一个广泛的类别,其中包含两个较小的类别:单元测试和集成测试。

        单元测试是一种识别程序最小单元的做法,并编写程序对它们进行相互隔离的测试。当程序的最小单元紧密耦合在一起时,可能很难相互隔离地测试它们。在这种情况下,有一些技术和工具可以帮助您(模拟和模拟框架)。为了有效地进行单元测试,你的代码库需要以一种特定的方式编写,一种支持单元测试的方式——程序的最小单元不能耦合在一起。大多数程序都没有考虑到这个原则,因此它们很难进行单元测试。尽可能进行单元测试,并在编写任何新代码时牢记这一原则,以便您始终可以对新代码进行单元测试。

        集成测试是识别作为程序大单元的功能集成许多较小单元的做法,并编写与程序的其他大单元隔离的程序来测试它们。例如,测试您的持久层正确地将对象保存到持久存储并从持久存储中正确检索对象的过程是一个集成测试,因为它同时测试您的持久层以及 TCP/IP 管道、数据库配置、数据库架构、数据库中已有的数据以及数据库中已有的数据与您的代码正在执行的操作之间的交互。除了单元测试之外,一定要进行集成测试。

        另外,创建一个单独的数据库纯粹是为了自动化集成测试。尽量避免在生产或开发数据库上运行自动化集成测试,因为您只会遇到问题。

        【讨论】:

          【解决方案4】:

          我偶然发现了同样的问题,你没有那么多选择......

          • 每次测试后回滚(将 xtUnit 用于 NUnit 或 MbUnit 回滚属性)。 这适用于 CRUD 操作的典型单元测试。
          • 在测试之前使用备份还原策略。这将使单元测试执行时间变长。但是 MbUnit 支持这一点(2.X 的属性在 3.x 主干中不存在)
          • 使用 sql 脚本创建/删除数据库。

          最后 2 个选项的最大优势是您可以在执行所谓的集成测试时使用它们(例如在需要支持其他层(物理服务器)上的数据库更改的 UI 自动化时)。

          我将最后一个与Watin 结合用于网络应用程序。对于 WPF 和 Win32 看看White,它看起来很有希望。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-27
            • 2011-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多