Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟IList。使用Moq添加_C#_Unit Testing_Entity Framework 6_Moq - Fatal编程技术网

C# 模拟IList。使用Moq添加

C# 模拟IList。使用Moq添加,c#,unit-testing,entity-framework-6,moq,C#,Unit Testing,Entity Framework 6,Moq,我正在尝试设置一个moq对象,以便对使用EF6的业务层对象运行一些单元测试。 到目前为止,我可以测试简单方法调用,并检查是否调用了这些方法。但是,是否有一种方法可以测试对象是否实际插入到基础集合中 这是我的模拟方法 private Mock<DbSet<T>> CreateMockDbSet<T>(IQueryable<T> entities) where T : class { var mockSet = new Mock<DbSe

我正在尝试设置一个moq对象,以便对使用EF6的业务层对象运行一些单元测试。 到目前为止,我可以测试简单方法调用,并检查是否调用了这些方法。但是,是否有一种方法可以测试对象是否实际插入到基础集合中

这是我的模拟方法

private Mock<DbSet<T>> CreateMockDbSet<T>(IQueryable<T> entities) where T : class
{
    var mockSet = new Mock<DbSet<T>>();
    mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(entities.Provider);
    mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(entities.Expression);
    mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(entities.ElementType);
    mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(entities.GetEnumerator());
    IList<T> list = entities as IList<T>;
    mockSet.As<IList<T>>().Setup(m => m.Add(It.IsAny<T>())).Returns(list.Add(It.IsAny<T>()));
    mockSet.Setup(m => m.Include(It.IsAny<string>())).Returns(mockSet.Object);
    return mockSet;
}
private Mock CreateMockDbSet(IQueryable实体),其中T:class
{
var mockSet=new Mock();
mockSet.As().Setup(m=>m.Provider).返回(entities.Provider);
mockSet.As().Setup(m=>m.Expression).Returns(entities.Expression);
mockSet.As().Setup(m=>m.ElementType).Returns(entities.ElementType);
mockSet.As().Setup(m=>m.GetEnumerator()).Returns(entities.GetEnumerator());
IList列表=作为IList的实体;
mockSet.As().Setup(m=>m.Add(It.IsAny())).Returns(list.Add(It.IsAny()));
Setup(m=>m.Include(It.IsAny()).Returns(mockSet.Object);
返回模拟集;
}
我试图从列表中模拟实际的
Add
方法,但如上所述,它表示没有方法
。Return

这可能吗


我需要验证对象是否在某些逻辑发生后插入到我的模拟集合中。

IList.Add
方法返回
void
,因此您无法设置return,而使用
。Callback

mockSet.As<IList<T>>()
    .Setup(m => m.Add(It.IsAny<T>()))
    .Callback<T>(item => list.Add(item));
mockSet.As<IList<T>>()
    .Setup(m => m.Add(Capture.In(list)));