2014-07-08 9 views
9

Sto tentando di affermare che un elenco contiene una determinata stringa. Dal momento che avrei bisogno che la condizione venisse valutata senza distinzione tra maiuscole e minuscole, ho usato una soluzione alternativa (qualcosa lungo this blog post).Confronto tra maiuscole e minuscole in Contiene sotto nUnità

Tuttavia, mi piacerebbe sapere perché non sembra esserci un modo per rendere il metodo Assert.Contains eseguire il confronto senza tenere conto della distinzione tra maiuscole e minuscole. O c'è un modo per farlo? (Quando ho cercato con Google, ho ottenuto solo visite per vincoli per il Assert.That metodo sulla pagina ufficiale per NUnit.)

+0

Si sta utilizzando NUnit? Se è così, contiene un metodo 'StringAssert.AreEqualIgnoringCase' che puoi usare qui. In alternativa, potresti 'ToUpper()' entrambe le stringhe nel tuo confronto come un altro bandaid. – aevitas

+0

@aevitas Hmm ... Che interrompe * Assert.SomeSome * sembra ... Ma se questo è il modo consigliato per farlo, allora così sia. Per quanto riguarda la mia domanda in modo approfondito: qualche idea del perché non ci sia * Contiene * con un parametro extra per il controllo del confronto? –

+0

Non ne ho idea, potrebbe esserci una ragione reale, ma potrebbe anche essere trascurato. Se vuoi davvero attenersi agli sguardi di 'Assert.Some', puoi usare' Assert.IsTrue (string.Equals (left, right, StringComparison.OrdinalIgnoreCase)); ' – aevitas

risposta

11

Non v'è alcun modo per specificare ignoreCase nel Assert.Contains. Che sia qualcosa che è trascurato o voluto non lo so. È possibile, tuttavia, utilizzare

StringAssert.AreEqualIgnoringCase(left, right); 

nei vostri test di unità per ottenere gli stessi risultati.

In alternativa, se si vuole rimanere con il "tema" Assert.Foo(), si potrebbe fare qualcosa di simile:

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

o, dal momento che Contains ossequi array:

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

cui si chiama ToUpper() su entrambi gli operandi stringa destra e sinistra, che effettivamente fa sì che il confronto ignori anche il caso. OrdinalIgnoreCase garantisce che alcuni casi angolari (leggi: turco) di colture non causino risultati imprevisti. Se sei interessato a leggerlo, dai un'occhiata a the Turkey test.

+0

+1 per il tacchino. Pensavo volessi dire l'uccello, hehe. Articolo molto interessante. –

8

NUnit fa prevedere che e si legge:

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

In NUnit 3, la seguente sintassi può essere utilizzato:

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