我正在尝试使用Moq模拟存储库。我发现了许多类似问题的提问,但没有一个能够解决我遇到的问题。
因此,我使用可从这里下载的存储库。更具体地说,可以在这里查看存储库本身,并且我正在使用的查询扩展可以在这里看到。
这是我的测试设置:
每当我尝试在使用模拟存储库的测试中运行此服务方法时,它都会抛出一个异常"System.Reflection.TargetParameterCountException: Parameter count mismatch."。
我尝试在模拟设置的.返回()方法中添加额外的对象参数,但没有成功。它总是抛出相同的异常。从我阅读的内容来看,Moq在测试表达式方面有些限制,但我已经看到人们使用类似的方法取得了成功。
由于Include()和Query() 方法返回的是IQueryFluent() 实例而不是直接表达式,因此我尝试在Moq return()方法中使用QueryFluent()类,但无法成功使用queryable(编译错误)。
非常感谢任何帮助,我真的想能够使用单元测试正确地测试这个。
编辑 - 我查看过的类似问题:
因此,我使用可从这里下载的存储库。更具体地说,可以在这里查看存储库本身,并且我正在使用的查询扩展可以在这里看到。
这是我的测试设置:
// A List<> of fakes.
this.containers = Builder<Container>.CreateListOfSize(10).Build();
// Here I'm trying to set up the mock object for the query.
this.containerRepoMock.Setup(p => p.
Query(It.IsAny<Expression<Func<Container, bool>>>())
.Include(It.IsAny<Expression<Func<Container, object>>>())
.Select())
.Returns((Expression<Func<Container, bool>> query, Expression<Func<Container, object>> include) =>
this.containers.AsQueryable().Where(query).Include(include));
// Tell the service to use the mock repository.
this.containerService = new ContainerService(mockUnitOfWork.Object);
这是我正在尝试测试的服务方法:
public ContainerDto GetContainerAndItsCategories(int containerId)
{
var entity = Repository
.Query(w => w.ContainerId == containerId)
.Include(c => c.Categories)
.Select();
var output = Mapper.EntityToDto(entity.SingleOrDefault());
return output;
}
每当我尝试在使用模拟存储库的测试中运行此服务方法时,它都会抛出一个异常"System.Reflection.TargetParameterCountException: Parameter count mismatch."。
我尝试在模拟设置的.返回()方法中添加额外的对象参数,但没有成功。它总是抛出相同的异常。从我阅读的内容来看,Moq在测试表达式方面有些限制,但我已经看到人们使用类似的方法取得了成功。
由于Include()和Query() 方法返回的是IQueryFluent() 实例而不是直接表达式,因此我尝试在Moq return()方法中使用QueryFluent()类,但无法成功使用queryable(编译错误)。
非常感谢任何帮助,我真的想能够使用单元测试正确地测试这个。
编辑 - 我查看过的类似问题: