测试业务线(LOB).NET应用程序?

时间:2009-01-04 23:52:48

标签: .net unit-testing testing

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

我已经涉足到Visual Studio中的内置单元测试工具,但我发现很难运行打到数据库的测试。由于数据发生了变化,再加上我不知道自己在做什么这一事实,似乎很难产生预期的结果并断言它们。另外我甚至听说你不应该对数据库进行单元测试......但是其他人如何对CRUD LOB软件进行单元测试呢?

我听到很多TDD和测试的持续集成,但似乎我甚至不能创建单元测试,我真的不能使用这些方法。因为像记事本这样的产品很容易创建单元测试...你有一定数量的功能,这些功能应该总是产生相同的结果。但是对于LOB应用程序,您可以在测试环境中创建或删除或修改销售订单等内容。

任何见解都将受到赞赏!

4 个答案:

答案 0 :(得分:1)

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

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

查看RhinoMocks或Inversion of Control Containers。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

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

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

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

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