模拟列表上的Linq .FirstOrDefault()

时间:2017-07-10 13:39:42

标签: c# linq unit-testing moq

我正在尝试使用Moq为一些代码编写单元测试,并在调用firstOrDefault()时遇到NullReferenceException。以下是受影响代码的片段:

    [TestMethod]
    public void LinqAlist()
    {
        var _mockList = new Mock<List<int>>();
        var realData = new List<int>() {1, 2, 3};

        _mockList.Object.AddRange(realData);
        //returns 1
         var realOne = realData.FirstOrDefault(x => x == 1);
        //throws NullReferenceException
        var mockOne = _mockList.Object.FirstOrDefault(x => x == 1);

    }

我无法理解为什么我会得到Null引用,据我所知,我已经正确地实例化了。

感谢您的帮助!

为什么我要嘲笑一个清单?

我试图模仿继承自List的Class的行为,如下所示:

public class IndxList<T> : List<T>.....

public class ClassUnderTest<T> : IndxList<T>....

我正在尝试调试我的null到List类的原因。

1 个答案:

答案 0 :(得分:0)

当你嘲笑一个类时你必须要小心,因为还有一些陷阱。 您无法使用此框架模拟非虚拟方法,即使与其他方法一起,仍将执行基本方法。

当你模拟一个类型时,它应该是关于简化测试其他部分所需的依赖关系。另外,您只测试单元测试的具体部分。

使用列表可以更轻松地创建一个列表。您可以假设此类已经过测试并正常工作。