2014-07-08 8 views
9

Ich versuche zu behaupten, dass eine Liste eine bestimmte Zeichenfolge enthält. Da ich die Bedingung benötigt, um die Groß- und Kleinschreibung unabhängig zu bewerten, habe ich eine Problemumgehung (etwas entlang this blog post) verwendet.Vergleich der Groß- und Kleinschreibung in Enthält unter nUnit

Ich würde jedoch gerne wissen, warum scheint es keinen Weg zu geben, die Assert.Contains Methode den Vergleich ohne Rücksicht auf die Groß-/Kleinschreibung durchzuführen. Oder gibt es einen Weg, das zu tun? (Wenn ich es gegoogelt, ich habe nur Zugriffe auf Einschränkungen für die Assert.That Methode auf der offiziellen Seite für nUnit.)

+0

Sind Sie nUnit mit? Wenn ja, enthält es eine 'StringAssert.AreEqualIgnoringCase'-Methode, die Sie hier verwenden könnten. Alternativ könnten Sie auch die beiden Strings ToUpper() in Ihrem Vergleich als einen anderen Bandaid verwenden. – aevitas

+0

@aevitas Hmm ... Das bricht die * Assert.SomeSome * sieht ... Aber wenn das der empfohlene Weg ist, das zu tun, dann sei es so. Was meine Frage-in-Tiefe angeht: Irgendeine Idee, warum es keine * Enthält * mit einem zusätzlichen Parameter zur Vergleichssteuerung gibt? –

+0

Ich habe keine Ahnung, es mag einen tatsächlichen Grund dafür geben, aber es könnte genauso gut übersehen werden. Wenn Sie wirklich bei 'Assert.Some' bleiben wollen, können Sie' Assert.IsTrue (string.Equals (left, right, StringComparison.OrdinalIgnoreCase))) verwenden; ' – aevitas

Antwort

11

Es gibt keine Möglichkeit ignoreCase im Assert.Contains angeben ist. Ob etwas übersehen oder beabsichtigt ist, weiß ich nicht. Sie können jedoch

in Ihren Komponententests verwenden, um die gleichen Ergebnisse zu erzielen.

Alternativ, wenn Sie mit dem Assert.Foo() "Thema" halten möchten, können Sie etwas tun:

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

oder, da Contains behandelt Arrays:

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

wo Sie ToUpper() nennen sowohl auf den linken als auch auf den rechten String-Operanden, was bewirkt, dass der Vergleich auch die Groß-/Kleinschreibung ignoriert. OrdinalIgnoreCase soll sicherstellen, dass einige Ecken (lesen: Türkisch) von Kulturen keine unerwarteten Ergebnisse verursachen. Wenn Sie daran interessiert sind, das zu lesen, werfen Sie einen Blick auf the Turkey test.

+0

+1 für die Türkei. Ich meinte du meintest den Vogel, hehe. Sehr interessanter Artikel. –

8

nUnit tut, liefern und es lautet:

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

In NUnit 3 kann die folgende Syntax verwendet werden:

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