在抽象类中,我有一个带有此签名的虚拟方法。
public virtual async Task<TResult> MethodAsync<TParameters, TResult>(
CommandFactory<TParameters> commandFactory,
TParameters parameters,
ModelAdapter<TResult> modelAdapter)
{ // method body }
CommandFactory
和ModelAdapter
是具有此签名的委托。
public delegate DbCommand CommandFactory<in TParameters>(
DbConnection connection,
TParameters parameters);
public delegate TResult ModelAdapter<out TResult>(DbDataReader dataReader);
如何使用MethodAsync
模拟Moq
答案 0 :(得分:1)
可以像其他任何虚拟或抽象成员一样设置
var mock = new Mock<MyAbstractClass>();
string expectedResult = "Hello World";
mock
.Setup(_ =>
_.MethodAsync(
It.IsAny<CommandFactory<string>>(),
It.IsAny<string>(),
It.IsAny<ModelAdapter<string>>())
)
.ReturnsAsync(expectedResult);
上面的示例简化了使用字符串的过程,只是为了演示如何使用通用参数。
It.IsAny
参数匹配器用于设置方法参数的期望值