9

Within this test method I need to compare the strings of user3 while ignoring case sensitivity. I'm thinking I should use CultureInfo.InvariantCulture to ignoreCase. Is this the best way to accomplish this, or is there a better way?

            //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");
user216672
  • 151
  • 3
  • 5
  • 14

3 Answers3

10

Using the Assert.AreEqual with the ignoreCase parameter is better because it doesn't require the creation of a new string (and, as pointed out by @dtb, you could work following the rules of a specific culture info)

Assert.AreEqual(user1.UserName, user2.UserName, true, CultureInfo.CurrentCulture);
Steve
  • 213,761
  • 22
  • 232
  • 286
3

StringInstance.ToUpperInvariant()

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

user3.UserName.ToUpperInvariant() == "TEST.USER";  
Daniel Möller
  • 84,878
  • 18
  • 192
  • 214
  • 2
    Comparing strings in a case-insensitive way by converting to upper or lower case does not work in all cultures. Use string comparison methods to compare strings, not case transformations! – dtb May 09 '13 at 21:45
  • If it works in the culture he's using, does it make a difference? – Corey Ogburn May 09 '13 at 21:46
1

In it's simple form; you can compare two string while ignoring their case like below.

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

I am not sure; why you need to take the route of non culture specific case since case is a simple (non localization) unit test case. Having said that, if still you wanted to go on that direction then do refer this link.

Community
  • 1
  • 1
S.N
  • 4,910
  • 5
  • 31
  • 51