You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:04:53