2014-11-25 12 views
5

ho incontrato alcuni test di unità scritti da un altro sviluppatore che utilizzano regolarmente una versione di overload di Assert.AreEqual in questo modo:Quando di passare cultura quando si confrontano le stringhe utilizzando Assert.AreEqual() in C#

Assert.AreEqual(stringparamX, stringParamY, true, CultureInfo.InvariantCulture); 

stringParamX è impostato all'interno del test dell'unità e stringparamY sarà il risultato dal sistema in prova.

È possibile che questo codice possa essere trasferito in altri paesi e questi test possono essere eseguiti. Tuttavia, per dare un'occhiata allo MSDN docs for Culture, non posso fare a meno di pensare che passare CultureInfo.InvariantCulture stia aggiungendo una complessità non necessaria qui. Non sono sicuro del tipo di impatto che rimuoverà sui test se eseguito in altre culture.

Nel contesto del test delle unità nella mia situazione, perché dovrei (o non) scrivere affermazioni come questa?

risposta

3

Non esiste alcun motivo per utilizzare tale sovraccarico se si specifica la coltura come InvariantCulture, poiché questa è l'impostazione predefinita.

Da the documentation here:

La cultura invariante viene utilizzato per il confronto.

Nota che ci sono alcuni casi in cui sarebbe fare la differenza, se non si sta utilizzando l'InvariantCulture, il più noto di essere "The Turkish I problem".

Il codice seguente illustra il problema:

Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR"); 

Assert.AreEqual("i", "I", true, CultureInfo.CurrentCulture); // This throws. 
Assert.AreEqual("i", "I", true, CultureInfo.InvariantCulture); // This doesn't throw. 
Assert.AreEqual("i", "I", true);        // This doesn't throw. 

Tuttavia, nota che non sarà interessata da tale perché si sta utilizzando la cultura invarianti.

2

Il MSDN documentation per Assert.AreEqual che non prendere gli stati CultureInfo nella sezione "Osservazioni":

La cultura invariante viene utilizzato per il confronto

Se fosse vero, quindi specificarlo esplicitamente non è tecnicamente necessario. È quindi un punto controverso se essere espliciti è meglio.

Detto questo, dipende da cosa viene testato se la cultura deve essere considerata per un confronto tra stringhe senza distinzione tra maiuscole e minuscole.