7

このテスト メソッド内で、大文字と小文字の区別を無視して、user3 の文字列を比較する必要があります。私は CultureInfo.InvariantCulture を ignoreCase に使用する必要があると考えています。これはこれを達成するための最良の方法ですか、それともより良い方法はありますか?

            //set test to get user 
            AsaMembershipProvider prov = this.GetMembershipProvider();        

            //call get users
            MembershipUser user1 = prov.GetUser("test.user", false);
            //ask for the username with deliberate case differences
            MembershipUser user2 = prov.GetUser("TeSt.UsEr", false);
            //getting a user with Upper and lower case in the username.
            MembershipUser user3 = prov.GetUser("Test.User", false);

            //prove that you still get the user, 
            Assert.AreNotEqual(null, user1);
            Assert.AreNotEqual(null, user2);

            //test by using the “.ToLower()” function on the resulting string.
            Assert.AreEqual(user1.UserName.ToLower(), user2.UserName.ToLower());
            Assert.AreEqual(user1.UserName, "test.user");
            Assert.AreEqual(user3.UserName, "test.user");
4

3 に答える 3

9

新しい文字列を作成する必要がないため、ignoreCase パラメーターを指定してAssert.AreEqualを使用することをお勧めします (@dtb が指摘したように、特定のカルチャ情報のルールに従って作業できます)。

Assert.AreEqual(user1.UserName, user2.UserName, true, CultureInfo.CurrentCulture);
于 2013-05-09T21:45:25.100 に答える
3

StringInstance.ToUpperInvariant()

user1.UserName.ToUpperInvariant() == user3.UserName.ToUpperInvariant();

user3.UserName.ToUpperInvariant() == "TEST.USER";  
于 2013-05-09T21:41:53.207 に答える
1

それは単純な形です。以下のように、大文字と小文字を区別せずに 2 つの文字列を比較できます。

Assert.AreEqual(0,string.Compare("test", "TEST", true));

私はわかりません; ケースは単純な(ローカライズされていない)ユニットテストケースであるため、非文化固有のケースのルートをたどる必要があるのはなぜですか。そうは言っても、それでもその方向に進みたい場合は、このリンクを参照してください.

于 2013-05-09T21:47:13.387 に答える