试图创建Moq对象

m.e*_*son 0 c# testing unit-testing moq mocking

我有一个方法,它接受一个IList<Person>并返回一个IEnumberable如下:

 internal static IEnumerable<Dictionary<string, string>> GetPersonsPerSite(IList<Person> Data)
    { 
         //Implementation ...
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个模拟对象,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"
                                                 });
Run Code Online (Sandbox Code Playgroud)

但是,当我来使用IEnumerable返回的对象时,抛出异常 Object reference not set to an instance of an object.

我是Moq的新手,我很确定我在这里缺少一个基本概念,但是我已经成功地能够使用其他模拟对象抛出异常和修改输出.

如果有人能指出我正确的方向,我会很感激.

Ric*_*nks 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);
Run Code Online (Sandbox Code Playgroud)