C #: Unit-Test zur Unterscheidung von CurrentCulture von InvariantCulture

8

Ich habe eine Methode, die ein StringComparison-Argument verwendet, und es benötigt wirklich einen Komponententest, um zu beweisen, dass sie den richtigen Vergleichstyp durchführt.

Das ist im Grunde das, was ich bisher habe. Es unterscheidet Ordinal vom Rest durch Vergleichen von "oe" und "œ" (siehe System.String ). Ich habe jedoch keinen Weg gefunden, um CurrentCulture von InvariantCulture zu unterscheiden.

%Vor%

Ich habe überlegt, das türkische Problem zu verwenden, indem ich "i" und "I" verglichen habe, aber es funktioniert nur für Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung.

Ich habe mich umgesehen und konnte keinen Fall finden, bei dem sich InvariantCulture von anderen Kulturen in einem String-Gleichheitstest unterscheidet (nur Sortierreihenfolge und Parsing / Serialisierung). Zum Beispiel werden "ô" und "o" abhängig von der Kultur anders sortiert, aber alle Kulturen liefern dasselbe Ergebnis in Gleichheitstests.

Gibt es einen Gleichheitstest, um InvariantCulture von anderen Kulturen zu unterscheiden?

BEARBEITEN: Die deutschen "ß" und "ss" geben das gleiche Ergebnis für alle Kulturen, so dass sie nicht funktionieren.

BEARBEITEN: Wirklich, alles, was benötigt wird, sind zwei Strings, die in einer Kultur als gleich und in einer anderen als gleichwertig betrachtet werden.

    
drifter 24.04.2011, 05:52
quelle

3 Antworten

2

Dank blackSphere konnte ich einige Unterschiede zwischen einigen Kulturen und der InvariantCulture finden, wie im folgenden Code gezeigt:

%Vor%

Leider scheint die Methode string.Compare diese Unterschiede nicht zu zeigen. Wie auch immer, meine Testmethode sieht jetzt so aus:

%Vor%     
drifter 11.05.2011, 16:47
quelle
3

Das MSDN-Beispiel auf CultureInfo enthält ein Beispiel mit unterschiedlichen Sortierreihenfolgen je nach Kultur. Ich denke, das ist deine wahrscheinlichste Wette für einen Startplatz. Sie können jedoch möglicherweise einige der folgenden Informationen nutzen, wenn dies nicht funktioniert.

Es sieht so aus, als ob auf der String.Compare MSDN eine ähnliche Testreihe ausgeführt wird Seite. In diesem Beispiel ist es jedoch in der en-US-Kultur.

Wenn Sie sich die CultureInfo.InvarientCulture-Seite ansehen, werden Sie feststellen, dass die InvarientCulture auf Englisch basiert, jedoch ohne regionale oder Ländercodierung. Und auf der Seite StringComparison wird erwähnt, dass Bindestriche je nach Sprache unterschiedlich gewichtet sind. Sie können möglicherweise davon profitieren, indem Sie eine Sprache finden, die Bindestriche anders als Englisch gewichtet.

Wikipedia hat einige interessante Hinweise zum Sortieren im Artikel Sortierung , die ebenfalls nützlich sein können. Schauen Sie sich alphabetisch sortiert durch Sortieren an und sehen Sie sich dann die spanischen Notizen an.

  

Zum Beispiel das 29-stellige Alphabet von   Spanisch behandelt - als ein einfacher Brief   nach n, und früher behandelt ch   und ll als Grundbuchstaben nach c   bzw. l. Ch und ll sind   immer noch Briefe, aber sind jetzt   alphabetisch als Zwei-Buchstaben   Kombinationen.

Ich bin mir nicht sicher, wie hilfreich das sein wird, aber es kann dich zu einer Antwort führen.

    
blackSphere 29.04.2011 21:26
quelle
1

Probieren Sie coté und côte mit fr-FR als Ihre aktuelle Kultur.

Oder verwenden Sie diese MSDN-Ressource , um weitere Beispiele zu finden.

  

Ich habe mich umgeschaut und konnte keinen Fall finden, bei dem InvariantCulture sich durch String-Vergleich von anderen Kulturen unterscheidet (nur Sortierreihenfolge und Parsing / Serialisierung).

Ich verstehe diesen Kommentar nicht - sicherlich verwendet die Sortierreihenfolge einen StringComparison.

    
Joe 24.04.2011 08:06
quelle

Tags und Links