【问题标题】:How to make unit test assertions in a unit testing framework agnostic manner如何以与单元测试框架无关的方式制作单元测试断言
【发布时间】:2016-03-28 15:31:58
【问题描述】:

我目前正在使用由多个内部项目使用的家庭旋转单元测试帮助程序包。直到最近,这个解决方案对我们来说效果很好,并帮助我们遵循 DRY 原则来获取常见的测试辅助方法。不幸的是,这个项目目前与 nUniut 相关联,我们刚刚继承了一些可以从这个帮助程序中受益的 xUnit 测试项目。这成为一个问题,因为每个测试框架似乎都在管理断言并监视不同的抛出异常以指示测试失败。

我希望这只是从基本异常类继承的问题,并且大多数单元测试框架会适当地捕获并处理它作为失败(或通过)的断言。然而,情况似乎并非如此。

是否有正确的方法来断言/抛出断言异常,而无需适当的测试运行程序可以使用的直接单元测试框架依赖项?或者是否必须为每个单元测试框架创建一个自定义适配器,才能使我的帮助类摆脱对测试项目单元测试框架的这种直接依赖?

【问题讨论】:

  • 除非我误解了它的用法,否则各种 Debug.Assert 方法只适用于调试环境,与单元测试断言不同。
  • 任何单元测试断言都可以转换为布尔值
  • 我不同意这一点,但是 Debug.Assert(和 Trace.Assert)语句不是单元测试断言。它们不会被 xUnit 或 nUnit 测试运行程序捕获(我尚未使用 MSTest 验证)它们的用途是用于诊断,而不是单元测试。
  • 了解 NUnit 的内部结构后,我认为您将需要为每个受支持的测试框架创建某种异常提供程序/工厂。 NUnit 仅将 NUnit 异常视为测试失败,任何其他异常都视为意外并导致测试出错。

标签: c# unit-testing nunit mstest xunit


【解决方案1】:

您必须创建一个接口并在每个框架的单独适配器中实现它。生成的功能集将是您支持的所有框架中最小的公分母。

我想这只会让真正的新手感到满意。这意味着您无法利用 NUnit 和 xUnit 中以不兼容形式存在的高级生产力增强功能。

你必须问问自己,统一性是否真的那么有价值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多