2013-05-09 2 views
4

В этом методе тестирования мне нужно сравнить строки user3, игнорируя чувствительность к регистру. Я думаю, что я должен использовать CultureInfo.InvariantCulture для ignoreCase. Это лучший способ добиться этого, или есть лучший способ?C# compare string 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"); 

ответ

5

Использование Assert.AreEqual с параметром IgnoreCase лучше, потому что он не требует создания новой строки (и, как отметил @dtb, вы можете работать по правилам конкретной информации о культуре)

Assert.AreEqual(user1.UserName, user2.UserName, true, CultureInfo.CurrentCulture); 
+0

было намного проще, чем я думал, что мне придется идти. Благодаря! – user216672

3

StringInstance.ToUpperInvariant()

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

user3.UserName.ToUpperInvariant() == "TEST.USER"; 
+1

Сравнение строк в режиме без учета регистра путем преобразования в верхний или нижний регистр не работает во всех культурах. Используйте методы сравнения строк для сравнения строк, а не преобразования в случайном порядке! – dtb

+0

Если это работает в культуре, которую он использует, то это имеет значение? –

+0

Не решает ли этот метод 'инвариант'? –

1

В простой форме; вы можете сравнить две строки, игнорируя их случай, как показано ниже.

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

Я не уверен; почему вам нужно идти по пути неконкурентного конкретного случая, поскольку случай - это простой (не локализующий) блок-тест. Сказав это, если вы все же хотите пойти по этому направлению, обратитесь к ссылке this.