如何单元测试私有列表/如何将对象强制转换为列表

时间:2013-11-28 11:39:41

标签: c# list unit-testing object casting

public class Class1
{ 
    private List<string> list;
    public Class1()
    { 
        list = new List<string>();
    }
    private addSomethingToList(string something)
    {
         // add something to the list
    }
}

[TestClass]
public class DoSomethingToListTests
{
    [TestMethod]
    public void DoSomethingToList_Something()
    {
        string string1 = "something";
        PrivateObject prob = new PrivateObject(new Class1());
        object[] arg = { string1 };
        prob.Invoke("addSomethingToList", string1);
        List<string> expected = new List<string>();
        expected.Add("something");
        object actual = prob.GetField("list");
        CollectionAssert.AreEqual(expected, actual);
    }
}

这给了我

  

参数2:无法从'object'转换为System.Collections.ICollection'

论证2是实际的

  

“Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection)”的最佳重载方法匹配具有一些无效参数

问题在于它将预期作为List进行评估,将实际作为对象进行评估。

有没有办法让它如此实际是一个列表?

我试过了

List<string/object> actual = prob.GetField("list");

但这给了我错误

  

无法将类型'object'隐式转换为'System.Collections.Generic.List'。存在显式转换(您是否错过了演员?)

1 个答案:

答案 0 :(得分:1)

您可以新建一个用实际

填充的单个项目列表
var actualList = new List<string>() { actual };
CollectionAssert.AreEqual(expected, actualList );