Nunit 针对集合与多个选项进行不区分大小写的比较

Nunit 针对集合与多个选项进行不区分大小写的比较,nunit,Nunit,我试图使用NUnit编写一个断言,以不区分大小写的方式,集合的所有(字符串)成员都是一组可能性中的一个。我以为我已经弄明白了,但它无法编译 我认为这种语法会起作用: Assert.That(new string[] { "red", "red", "red", "green" }, Is.All.AnyOf(new string[] { "RED", "BLUE", "GREEN" }).IgnoreCase); 然而,这是错误的 'Constraint' does not cont

我试图使用NUnit编写一个断言,以不区分大小写的方式,集合的所有(字符串)成员都是一组可能性中的一个。我以为我已经弄明白了,但它无法编译

我认为这种语法会起作用:

Assert.That(new string[] { "red", "red", "red", "green" }, 
    Is.All.AnyOf(new string[] { "RED", "BLUE", "GREEN" }).IgnoreCase);
然而,这是错误的

'Constraint' does not contain a definition for 'IgnoreCase' and no
extension method 'IgnoreCase' accepting a first argument of
type 'Constraint' could be found (are you missing a using directive or an
assembly reference?)
单个项目的简单测试是一组可能性中的一种,以不区分大小写的方式按预期工作

Assert.That("red", Is.AnyOf(new string[] { "RED", "BLUE" }).IgnoreCase);

我该如何表达这一主张?或者这是一个错误,这不起作用吗?

由于操作的优先顺序,您遇到了这个问题。您希望将
.IgnoreCase
修饰符应用于
AnyOfConstraint
,但它将应用于
IsAll
的结果,IsAll是不支持该修饰符的基本级别
约束

除非对NUnit进行更改,否则您需要解决方法。最简单的似乎是

Assert.That(new string[] { "red", "red", "red", "green" }, 
  new AllItemsConstraint(
    Is.AnyOf(new string[] { "RED", "BLUE", "GREEN" }).IgnoreCase));

我还没有尝试过这个,所以请检查我的语法、拼写等。

您能使用
CollectionAssert.IsSubsetOf
?只需转换所有
ToLower()
CollectionAssert.IsSubsetOf(新字符串[]{“RED”,“GREEN”}.Select(s=>s.ToLower()),新字符串[]{“RED”,“BLUE”,“GREEN”}.Select(s=>s.ToLower())
@Johnny这对我的示例有效,但不适用于我的实际情况,因为第一个数组更像
新字符串[]{“RED”,“RED”,“RED”,“RED”,“RED”,“RED”,“GREEN”}
。第一个数组比第二个数组长得多,并且包含许多重复的元素。@Johnny我已经更新了问题中的示例以包含重复的元素。但是您可以使用
Distinct()
。这将删除重复项…对于您的情况可能类似于此:
CollectionAssert.Isubsetof(新字符串[]{”红色、红色、红色、绿色“}。选择(s=>s.ToLower()).Distinct(),新字符串[]{“红色”、“蓝色”、“绿色”}。选择(s=>s.ToLower()).Distinct())