如何在NUnit中使用类型可推断的集合表达式断言集合值
NUnit集合表达式断言简化写法问题
问题描述
目前在NUnit中使用集合表达式断言数组值时,需要对集合表达式做强制类型转换,写法如下:
var arr = new[] { 1, 2, 3 }; Assert.That(arr, Is.EquivalentTo((int[])[1, 2, 7, 3]));
期望简化为无需强制转换的写法:
var arr = new[] { 1, 2, 3 }; Assert.That(arr, Is.EquivalentTo([1, 2, 7, 3]));
核心需求是让EquivalentTo()能接受与被测数组arr同类型的数组或可枚举对象,而当前该方法仅接受无类型的IEnumerable。同时测试值的类型会对Is.EquivalentTo约束的行为产生影响,但NUnit的约束系统本身是无类型的。
原生支持情况
NUnit目前没有直接实现该需求的原生方式,因为其约束系统设计为无类型,无法自动根据被测对象的类型推断集合表达式的类型,必须显式指定或通过其他方式约束类型。
替代实现方案
如果需要简化写法,可以自定义泛型工具方法来实现,代码如下:
void AssertCollection<T>(IEnumerable<T> coll, IEnumerable<T> expected) { Assert.That(coll, Is.EquivalentTo(expected)); } // 使用方式 AssertCollection(arr, [1, 2, 7, 3]);
这个方法通过泛型参数T约束了输入的集合类型,集合表达式会自动推断为IEnumerable<T>,无需再做强制类型转换。
内容的提问来源于stack exchange,提问作者citykid
相关产品推荐
相关产品推荐

