我的可测试函数使用EF.Find()so,因为我发现我需要实现 find 的模拟。似乎被编译的唯一代码是c#testsContextMock.Setup(m => m.Find(It.IsAny<Type>(), It.IsAny<object[]>()))
.Returns<object[]>(hashes => testsMock.Object.FirstOrDefault(u => u.hash == (string)hashes[0]))其中testsContextMock是Mock<DbContext>对象,并且testsMock是Mock<DbSet<MyEntity>>。但是完成此代码后我收到此错误System.ArgumentException : Invalid callback.
Setup on method with 2 parameter(s) cannot invoke callback
with different number of parameters (1).正如我假设发生这种情况的原因是调用的可测试方法签名Find()是DbSet<MyEntity>.Find(params object[] keyValues)和模拟方法的签名是DbContext.Find(Type entityType, params object[] keyValues)。如果我尝试模拟其他重载,它会因编译器错误而失败 Argument 1: cannot convert from 'object[]' to 'System.Type'
1 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
让我们仔细看看被调用函数的签名:
DbContext.Find(Type entityType, params object[] keyValues)
我们在模拟中得到了什么DbSet<MyEntity>.Find(params object[] keyValues)
我们从方法中得到什么
这很容易看到,但不知何故我错过了第一个参考上下文和第二个集合。所以在我的调用中而不是从上下文中查找m
testsContextMock.Setup(m => m.Find(It.IsAny<Type>(), It.IsAny<object[]>()))
我只需要从正确的DbSet中找到
testsContextMock.Setup(m => m.MyEntities.Find(It.IsAny<object[]>()))
- 1 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消