我有一个方法,它接受IList<Person>
并返回一个IEnumberable:
internal static IEnumerable<Dictionary<string, string>> GetPersonsPerSite(IList<Person> Data)
{
//Implementation ...
}
并且我正在尝试创建IList<Person>
的模拟对象,以便我可以测试此方法。
使用Moq我写了以下内容:
var mockObjects = new Mock<IList<Person>>();
mockObjects.Setup(x => x[0]).Returns(new Person()
{
SITE_ID = "test",
MPAN = "test",
ADDLINE1 = "test",
ADDLINE2 = "test",
ADDRESS_LINE_1 = "test",
ADDRESS_LINE_2 = "test"
});
然而,当我来使用IEnumerable返回的对象时,抛出异常Object reference not set to an instance of an object.
我是Moq的新手,我很确定我在这里缺少一个基本概念,但是我已经成功地能够使用其他模拟对象抛出异常和修改输出。
如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:5)
不要嘲笑IList。你不需要,除非你想要检查一些特定的东西。
相反,只需保持测试简单,并执行以下操作:
var testData = new List<Person>(){new Person()
{
SITE_ID = "test",
MPAN = "test",
ADDLINE1 = "test",
ADDLINE2 = "test",
ADDRESS_LINE_1 = "test",
ADDRESS_LINE_2 = "test"
}};
var result = GetPersonsePerSite(testData);
答案 1 :(得分:3)
你到那里的代码看起来很好,并且对我有用。你能扩展一下你实际使用mockObjects.Object
的地方的例子并找到它吗?
另外,你真的需要嘲笑你的IList<Person>
吗?
如果您只是使用它来为测试中的方法提供测试数据,那么只需使用一个具体的列表 - 使用模拟就没有任何好处。
当然,您可能正在嘲笑它,以便您可以验证对其采取的某些操作(调用的方法,访问的属性等) - 在这种情况下是不同的。