Nunit 针对集合与多个选项进行不区分大小写的比较
我试图使用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
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())
?