繁体   English   中英

单元测试无法在C#中将字符串列表转换为小写

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM