【问题标题】:Case insensitive comparison in Contains under nUnit在nUnit下的Contains中进行不区分大小写的比较
【发布时间】:2014-07-08 14:20:27
【问题描述】:

我试图断言一个列表包含某个字符串。由于我需要对条件进行不区分大小写的评估,因此我使用了一种解决方法(类似于this blog post)。

但是,我想知道为什么似乎没有办法让 Assert.Contains 方法在不区分大小写的情况下执行比较。或者有没有办法做到这一点? (当我用谷歌搜索它时,我只在 nUnit 的官方页面上找到了 Assert.That 方法的约束。)

【问题讨论】:

  • 你在使用 nUnit 吗?如果是这样,它包含一个您可以在此处使用的StringAssert.AreEqualIgnoringCase 方法。或者,您可以将比较中的两个字符串 ToUpper() 作为另一个创可贴。
  • @aevitas 嗯......这打破了 Assert.SomeSome 的外观......但如果这是推荐的方法,那就这样吧。至于我的深入问题:知道为什么没有带有额外参数的 Contains 来进行比较控制吗?
  • 我不知道,这可能是有实际原因的,但也可能被忽略。如果你真的想坚持Assert.Some 的外观,你可以使用Assert.IsTrue(string.Equals(left, right, StringComparison.OrdinalIgnoreCase));
  • @aevitas 这就是我已经在做的事情了,呵呵。我只是担心有一个我不知道的原因会来咬我的坐姿。请把你的想法作为回复,如果没有其他人比你更出色,我可以接受这个答案。
  • @aevitas 达到 99%。其余的,我冒昧地添加了它。哇!现在,您对 SO 的信任度提高了 10 分。恭喜! :)

标签: c# nunit contains assert


【解决方案1】:

无法在Assert.Contains 中指定ignoreCase。我不知道这是被忽视的还是有意的。但是,您可以使用

StringAssert.AreEqualIgnoringCase(left, right);

在您的单元测试中获得相同的结果。

或者,如果您希望坚持使用Assert.Foo()“主题”,您可以执行以下操作:

Assert.IsTrue(string.Equals(left, right, StringComparison.OrdinalIgnoreCase));

或者,因为Contains 处理数组:

Assert.IsTrue(list.Any(element => element.ToUpper() == "VILTERSTEN"));

您在左右字符串操作数上都调用ToUpper(),这实际上也使比较忽略大小写。 OrdinalIgnoreCase 是为了确保文化的某些极端情况(阅读:土耳其语)不会导致意外结果。如果您有兴趣阅读此内容,请查看the Turkey test

【讨论】:

  • +1 代表火鸡。我虽然你的意思是鸟,呵呵。非常有趣的文章。
【解决方案2】:

在 NUnit 3 中,可以使用以下语法:

Assert.That(new[] {"red", "green", "blue"}, Does.Contain("RED").IgnoreCase);

【讨论】:

  • 这工作正常,可读,遵循框架机制,我认为它应该是公认的答案。
【解决方案3】:

nUnit 确实提供了这一点,它的内容是:

Assert.That("red,green,blue".Split(','), Contains.Item("RED").IgnoreCase);

【讨论】:

  • 不再支持使用 3.10 和 .IgnoreCore。最好将下面的答案与 nunit 3 一起使用。
猜你喜欢
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2013-03-11
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多