[英]unit test failing for converting string list to lowercase in c#
我的单元测试在c#中不断失败,并且我尝试了几种不同的方法。 任何帮助将不胜感激。 只是不转换我添加为小写的书。 所以测试失败
private List<string> _number;
public Book (string[] id)
{
//_number = idents.Select (d => d.ToLower ()).ToList ();
_number = new List<string>(id);
_number = _number.ConvertAll (d => d.ToLower ());
}
public bool Exist (string id)
{
return _number.Contains (id);
}
public void AddBook (string id)
{
_number.Add (id.ToLower());
}
_______________________________________________________________________________
[Test ()]
public void TestAddBook ()
{
Book id = new Book (new string[] {"ABC", "DEF"});
id.AddBook ("GHI");
Assert.AreEqual (true, id.Exist ("ghi"));
}
测试方法不应该是这样的:
[TestMethod]
public void TestAddBook ()
{
Book id = new Book (new string[] {"ABC", "DEF"});
id.AddBook ("GHI");
Assert.AreEqual (true, id.Exist ("ghi"));
}
至少这是我灵敏的水晶球所感觉到的。
解决此问题的更好方法不是将密钥实际转换为小写,而是使用可以以不区分大小写的方式存储密钥的构造。 这将节省处理时间并减少编程错误。
如果您只想存储书钥匙,那么我强烈建议您改用HashSet 。
列表的Contains方法为O(n),而哈希集的方法为O(1) 。 如果您有很多条目,这是一个很大的不同。
这是使用HashSet重写Book类的方法:
public class Book
{
private HashSet<string> _number;
public Book(string[] id)
{
_number = new HashSet<string>(id, StringComparer.InvariantCultureIgnoreCase);
}
public bool Exist(string id)
{
return _number.Contains(id);
}
public void AddBook(string id)
{
_number.Add(id);
}
}
使用此修订的类,您无需对测试方法进行任何更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.