繁体   English   中英

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

[英]Testing Line-of-Business (LOB) .NET Applications?

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

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

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

任何见解将不胜感激!

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

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

查看RhinoMocks或Inversion Of Control Containers。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM