Shoe-horning集成和系统测试到单元测试框架

时间:2010-06-19 02:14:55

标签: .net unit-testing integration-testing

domain-manager article所示,我有兴趣创建一个集成测试工具,用于创建服务器和许多客户端,其中所有客户端都在单个进程中运行。但是一旦我实现了这个目标,我就会非常想要执行这样的集成。系统测试来自单元测试框架(NUnit或VS Team测试)。

选择在单元测试框架内运行集成或系统测试有哪些优缺点?这是我自己的刺:

赞成

  • 它可以减少执行集成测试的时间和成本。
  • 每次构建都可能实现集成测试。

缺点

  • 并非所有集成测试都会很快。其中一些需要一分钟才能运行(例如面向性能的集成测试)。

无论哪种方式,如果我的新集成测试代码放入单元测试框架,您会在哪里推荐它?换句话说,你会推荐什么样的“集成测试”框架?

3 个答案:

答案 0 :(得分:3)

我认为使用您已经熟悉的单元测试框架编写集成测试没有任何问题。由于这些是集成测试,因此有一些因素可以将它们与单元测试区分开来。一个原因是它们依赖于外部系统(即使你在代码中将它们中的一些旋转起来),所以如果其中一个不可用,那么你的测试将会失败。另一方面,正如您已经指出的那样,集成测试需要更长时间才能运行。

解决这些问题的方法是将构建脚本配置为在CI构建期间运行集成测试,但在计划构建期间(例如每晚构建)运行它们。同样重要的是,开发人员能够按需手动运行集成测试,以便他们可以在本地计算机上验证所有测试都没有破坏,如果有,则能够验证他们是否已更正没有手动触发系统构建的问题。

根据您使用的测试框架,您可以使用不同的方法将单元测试与集成测试分开,以便您可以配置构建以执行其中一个或两个。一种方法是将集成测试移动到单独的项目中,并且仅在每晚构建期间在该项目中执行测试。另一种方法是使用Category attribute in NUnit之类的东西将某些测试标记为集成测试。然后,您可以配置测试运行器以排除此类别中针对您不希望执行集成测试的构建的测试。

答案 1 :(得分:0)

自动化测试的帮助进行测试。

您已花时间编写测试。它可以在将来再次运行是一件好事(它有助于确保你没有破坏任何东西)。

NUnit是一个帮助您运行想要运行的测试的系统。对于“人为测试”进行“更彻底的测试”,你并不是一个坏人。

唯一的缺点是其中一些测试需要太长时间;并且不鼓励开发人员在每次运行时运行测试。那时分类(即选择性地和暂时地)禁用测试是完全可以接受的。


我编写的单元测试专门用于记录函数中的错误。没有立即需要修复since it's a one in a million chance that anyone will hit the bugi've even been insulted for even testing the case)。但至少测试就在那里 - 提醒大家所有时间该功能都不完美:

void TestDateToString_KnownBug_FailsOnPseudo();

当然我取消了那个测试,所以我没有看到它一直失败,但是单元测试的目的是让我的生活更容易 - 而不是更痛苦。

答案 2 :(得分:0)

如果您考虑一下,大多数单元测试框架都不是单元测试所特有的。它们提供了运行任意代码并验证其输出的工具。所有这些对于集成和系统测试来说都是必要的(如果还不够)。

出于这个原因,我认为使用“单元”测试框架进行非单元测试是完全合理的。

<强>赞成

  • 易于将非单元测试集成到您的构建过程中(假设您已经进行了单元测试)
  • 能够利用单元测试框架生态系统(GUI等)的工具
  • 开发人员会熟悉测试语言(通常会使用与开发中使用的相同的通用语言)
  • 单元测试框架通常具有许多适用于非单元测试的功能,例如:超时,类别。

<强>缺点

  • 无法协助处理高级别任务,例如启动或监控非单元测试通常需要的流程,安装或数据库设置。
  • 因为他们使用通用编程语言,由于设置测试的复杂性,特别是系统测试,测试可能会变得冗长。
  • 大多数单元测试框架不提供任何高级工具,例如测试计划的记录/回放,或适用于验收测试/业务用户的UI。
  • 如果在测试中注册了许多进程/系统,则安装/拆卸可能会很难看并且很复杂。许多单元测试框架不支持合作取消,这将允许您清理房屋。