【问题标题】:Is there a .net framework that manages unit AND integration testing?是否有管理单元和集成测试的 .net 框架?
【发布时间】:2011-01-04 16:44:23
【问题描述】:

我听说过单元测试的一个优点是您可以在一分钟左右运行 2000 多个测试。因为唯一的限制是 CPU 速度和内存。但是,我喜欢在我的测试项目中包含外部依赖断言/测试(例如:应用程序登录的用户帐户是否对适当的表具有插入/更新/删除权限,以说明数据库是否曾经迁移?)

是否有框架或受支持的方式来利用 MS 测试,您可以选择仅运行单元测试或仅运行集成测试,或单击按钮即可运行两者?

【问题讨论】:

  • 不能按项目分开吗? Project.Tests.Unit Project.Tests.Integration 等
  • 我更喜欢在一个测试项目中进行所有测试。所以项目A,会有一个项目A测试项目包含单元测试和集成测试。使用类别并将单元测试与集成测试分开意味着您仍然可以单独运行这些测试。拥有单独的项目只会增加复杂性并使解决方案变得臃肿。
  • @ Dockers 是的,这就是我想要避免的,我不希望每个应用程序项目有多个测试项目。
  • 该评论是针对 mxmissile 的。

标签: .net unit-testing automated-tests integration-testing


【解决方案1】:

是的。 :)

在 VS2008 中,当你创建一个测试项目时,Visual Studio 也会生成一个测试元数据文件,或 vsmdi 文件。一个解决方案可能只有一个元数据文件。此文件是在解决方案中跨所有测试项目生成的所有测试的清单。打开元数据文件,打开测试列表编辑器 - 用于编辑和执行文件的 GUI。

从测试列表编辑器中,您可以创建测试列表 [例如 UnitTestList、IntegrationTestList],并将单个测试分配给特定的测试列表。默认情况下,测试列表编辑器会在“所有加载的测试”列表和“不在列表中的测试”列表中列出所有测试,以帮助分配测试。使用这些来查找测试组或将测试组分配到列表中。请记住,一个测试可能只属于一个列表。

有两种方法可以调用测试列表

  • 在 Visual Studio 中,每个列表都可以从测试列表编辑器中单独调用。
  • 从命令行,可以使用特定列表调用 MSTest。

一个选项适合开发人员的日常工作流程,另一个适合自动化构建过程。

我在上一个项目中设置了类似的东西。


此功能非常有价值*。

理想情况下,我们希望在修改代码库时运行所有可能的测试。这为我们在进行更改时提供了最佳响应。

然而,在实践中,在测试套件中运行每个测试通常意味着在构建时间上增加几分钟或几小时的执行时间 [取决于代码库的大小和构建环境] - 这对于开发人员和持续集成 [CI ] 环境,这两者都需要快速周转才能提供相关响应。

指定显式测试列表的能力允许开发人员、CI 环境和最终构建环境有选择地针对功能位,而不会牺牲质量控制或影响整体生产力。


例如,我正在开发一个分布式应用程序。我们编写了自己的 Windows 服务来处理传入请求,并利用 Amazon 的 Web 服务进行存储。我们不想在每次构建时都运行我们的 Amazon 测试套件,因为

  1. 亚马逊并非一直在发展
  2. 我们并不总是联系在一起
  3. 响应时间可以以数百毫秒为单位测量,在一批测试请求中可以轻松地增加我们的测试套件执行时间

但是,我们希望保留这些测试,因为我们需要一个套件来验证行为。如果作为开发人员我对我们与 Amazon 的集成有疑问,我可以根据需要从我的开发环境中执行这些测试。当需要为 QA 推广最终版本时,Cruise Control 还可以执行这些测试,以确保其他职能领域的人员不会无意中破坏 Amazon 集成。

我们将这些 Amazon 测试放入一个集成测试列表中,该列表可供每个开发人员使用,并在调用 Cruise Control 以促进构建时在构建机器上执行。我们维护了另一个单元测试列表,该列表也可供每个开发人员使用,并在每个构建中执行。由于所有这些都是内存中的 [并且写得很好 :] 并且将在构建项目所需的时间内执行,因此它们不会影响单个构建操作并及时从 Cruise Control 提供出色的反馈。

*=有价值==重要。 “价值”是当天的词:)

【讨论】:

  • +1,这看起来很简单。更仔细地查看“测试”菜单,从那里看起来很不言自明。
  • 您认为此功能在哪些情况下很重要?
  • 您是否手动维护“单元测试”列表?是否总是需要将新创建的测试添加到测试列表中?
  • @Michał Drozdowicz,简而言之,是的。维护明确的测试列表是一个选择加入的过程。但是,有命令行选项支持“一揽子”测试调用[即测试项目中的所有测试]。我不知道这些选项,但它们确实存在!我发誓! :)
  • 可以从测试项目 dll 运行所有测试,但我相信它不允许任何“排除”选项 - 你不能只说“运行除来自'集成'列表"
【解决方案2】:

NUnit

您可以在categories 中设置灯具。

我将我的集成测试设置为一个类别。然后使用 NUnit GUI,您可以指定要运行的类别。

在 Visual Studio 中运行时,我使用 TestDriven.NET 运行我的测试。我的测试项目中的测试按类型分开,因此这使得单独运行单元测试或集成测试变得容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多