我正在尝试使用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类的原因。
答案 0 :(得分:0)
当你嘲笑一个类时你必须要小心,因为还有一些陷阱。 您无法使用此框架模拟非虚拟方法,即使与其他方法一起,仍将执行基本方法。
当你模拟一个类型时,它应该是关于简化测试其他部分所需的依赖关系。另外,您只测试单元测试的具体部分。
使用列表可以更轻松地创建一个列表。您可以假设此类已经过测试并正常工作。