C# 如何以单元测试框架不可知的方式进行单元测试断言

C# 如何以单元测试框架不可知的方式进行单元测试断言,c#,unit-testing,nunit,mstest,xunit,C#,Unit Testing,Nunit,Mstest,Xunit,我目前正在使用一个家用单元测试辅助包,它被几个内部项目使用。直到最近,这个解决方案一直在为我们工作,并帮助我们遵循常见测试方法的DRY原则。不幸的是,这个项目目前与nUniut绑定,我们刚刚继承了一些xUnit测试项目,这些项目可以从这个助手中受益。这成为一个问题,因为每个测试框架似乎都在管理断言,并监视抛出的不同异常以指示测试失败 我希望这仅仅是从一个基本异常类继承的问题,而大多数单元测试框架只是将其作为一个失败(或通过)的断言进行捕获和处理。然而,情况似乎并非如此 有没有一种正确的方法可以断

我目前正在使用一个家用单元测试辅助包,它被几个内部项目使用。直到最近,这个解决方案一直在为我们工作,并帮助我们遵循常见测试方法的DRY原则。不幸的是,这个项目目前与nUniut绑定,我们刚刚继承了一些xUnit测试项目,这些项目可以从这个助手中受益。这成为一个问题,因为每个测试框架似乎都在管理断言,并监视抛出的不同异常以指示测试失败

我希望这仅仅是从一个基本异常类继承的问题,而大多数单元测试框架只是将其作为一个失败(或通过)的断言进行捕获和处理。然而,情况似乎并非如此


有没有一种正确的方法可以断言/抛出断言异常,而不需要一个直接的单元测试框架依赖项,该依赖项可以被适当的测试运行程序使用?还是必须为每个单元测试框架创建一个自定义适配器,以便我的助手类不受测试项目单元测试框架的直接依赖?

您必须为每个框架创建一个接口并在单独的适配器中实现它。由此产生的特性集将是您支持的所有框架中最低的公分母

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


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

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