C# 当使用genrics时,mocked DbSet不会返回值
这是本书的延续 我正在用多个dbset模拟DbContext。我将对象添加到模拟对象中,但当我试图通过其C# 当使用genrics时,mocked DbSet不会返回值,c#,entity-framework,unit-testing,generics,moq,C#,Entity Framework,Unit Testing,Generics,Moq,这是本书的延续 我正在用多个dbset模拟DbContext。我将对象添加到模拟对象中,但当我试图通过其id查询特定对象时,它会抛出一个错误 AmazonReport.Tests.ProductTests.ProductControllerTest.TestReturnEditedModel: System.InvalidOperationException : Sequence contains no matching element 我已经缩小了这个函数的范围(foreach的fo
id
查询特定对象时,它会抛出一个错误
AmazonReport.Tests.ProductTests.ProductControllerTest.TestReturnEditedModel:
System.InvalidOperationException : Sequence contains no matching element
我已经缩小了这个函数的范围(foreach的foreach
循环用于验证im传入的id是否在DbSet中,它就是DbSet)
照目前的情况,它不起作用。但是,如果我注释掉当前的return语句并使用返回this.DbSet.Single(x=>Convert.ToInt32(x.Id)==Convert.ToInt32(Id))代码>它不会抛出错误
因此,我的问题是,当DbSet
包含一个id==3的对象和传入的TId id==3的对象时,为什么compare不返回任何对象?,因为通过将这两个对象都转换为对象,现在使用引用相等而不是值相等。下面是一个实际发生情况的简单例子:
int i = 1;
int j = 1;
bool eq = ((object)i) == ((object)j); // false
而直接将两个整数与=
进行比较则是通过值来比较两个整数。因为通过将两个整数都转换为对象,现在使用的是引用相等,而不是值相等。下面是一个实际发生情况的简单例子:
int i = 1;
int j = 1;
bool eq = ((object)i) == ((object)j); // false
而直接将两个整数与=
进行比较则是通过值来比较两个整数。因为通过将两个整数都转换为对象,现在使用的是引用相等,而不是值相等。下面是一个实际发生情况的简单例子:
int i = 1;
int j = 1;
bool eq = ((object)i) == ((object)j); // false
而直接将两个整数与=
进行比较则是通过值来比较两个整数。因为通过将两个整数都转换为对象,现在使用的是引用相等,而不是值相等。下面是一个实际发生情况的简单例子:
int i = 1;
int j = 1;
bool eq = ((object)i) == ((object)j); // false
而直接用==
比较两个整数时,会按值比较两个整数。我们可以看到模拟DbSet的设置代码吗?我们可以看到模拟DbSet的设置代码吗?我们可以看到模拟DbSet的设置代码吗?我们可以看到模拟DbSet的设置代码吗?谢谢。object.equals()
函数是否可以比较这两个参数?是的,object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明Single
没有返回值——这意味着GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了GetEnumerator
方法,mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())代码>。我可以在我设置mockDbContext
和DbSet
s的地方发布代码,但是大约有150行。谢谢。object.equals()
函数是否可以比较这两个参数?是的,object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明Single
没有返回值——这意味着GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了GetEnumerator
方法,mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())代码>。我可以在我设置mockDbContext
和DbSet
s的地方发布代码,但是大约有150行。谢谢。object.equals()
函数是否可以比较这两个参数?是的,object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明Single
没有返回值——这意味着GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了GetEnumerator
方法,mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())代码>。我可以在我设置mockDbContext
和DbSet
s的地方发布代码,但是大约有150行。谢谢。object.equals()
函数是否可以比较这两个参数?是的,object.equals
将按值比较参数(如果它们是值类型)。我不确定这是否能很好地发挥EF的作用。我实际上没有看到这种比较。尽管OP正在Moq ing DbSet,但可能他没有Moq GetEnumerator方法,这会导致像Single
这样的Linq扩展方法失败(假设他没有进行部分模拟)@DanPantry:异常表明Single
没有返回值——这意味着GetEnumerator
可能正在返回某个值(即使它是一个空集合)。@DanPantry我确实设置了GetEnumerator
方法,mockBrandSet.As().Setup(m=>m.GetEnumerator()).Returns(brandData.GetEnumerator())代码>。我可以在设置mockDbContext
和DbSet
s的地方发布代码,但它大约有150行长。