C# Moq模拟泛型和表达式函数
当我试图模仿一名代表时,我遇到了一些问题。到目前为止,我得到的是: 接口规格:C# Moq模拟泛型和表达式函数,c#,unit-testing,generics,mocking,moq,C#,Unit Testing,Generics,Mocking,Moq,当我试图模仿一名代表时,我遇到了一些问题。到目前为止,我得到的是: 接口规格: TResult FindOne<T, TResult>( ISpecification<T> criteria, Expression<Func<T, TResult>> property) where T : class; public virtual TResult FindOne<T, TResult>( ISpecifica
TResult FindOne<T, TResult>(
ISpecification<T> criteria, Expression<Func<T, TResult>> property)
where T : class;
public virtual TResult FindOne<T, TResult>(
ISpecification<T> criteria, Expression<Func<T, TResult>> property)
where T : class
{
return criteria.SatisfyingItemFrom(GetQuery<T>(), property);
}
到目前为止我的模拟(不起作用):
\u仓库仓储模拟
.Setup(x=>x.FindOne(It.IsAny()),
It.IsAny())
.Returns(TestLine.Id);
我得到的错误是:
Moq.MockException:IGenericRepository.FindOne(规范`1[Line],Line=>Line.Id)调用失败,模拟行为严格。
模拟上的所有调用都必须有相应的设置
但是我不确定如何将line=>line.Id发送到我的mock中 据我所知,
It.IsAny()
子句必须与声明匹配
使用
TResult FindOne<T, TResult>(
ISpecification<T> criteria,
Expression<Func<T, TResult>> property) where T : class;
因此,设置必须是
_warehouseRepositoryMock.Setup(x => x.FindOne(
It.IsAny<ISpecification<Line>>(),
It.IsAny<Expression<Func<Line, string>>>())).Returns(TestLine.Id);
什么类型是
line.Id
?它是一个字符串,但当我从一个对象更改为另一个字符串时,它会给出相同的错误。您是否尝试使用isspecification
而不是MySpecification
:\u warehouseRepositoryMock.Setup(x=>x.FindOne(It.IsAny(),It.IsAny())。返回(TestLine.Id)代码>?谢谢abto-我想是函数调用失败了-我不认为是因为ISpec。非常感谢你
TResult FindOne<T, TResult>(
ISpecification<T> criteria,
Expression<Func<T, TResult>> property) where T : class;
string FindOne(
ISpecification<Line> criteria,
Expression<Func<Line, string>> property);
_warehouseRepositoryMock.Setup(x => x.FindOne(
It.IsAny<ISpecification<Line>>(),
It.IsAny<Expression<Func<Line, string>>>())).Returns(TestLine.Id);
_warehouseRepositoryMock.Setup(x => x.FindOne(
It.Is<ISpecification<Line>>(s => s is MySpecification),
It.IsAny<Expression<Func<Line, string>>>())).Returns(TestLine.Id);