如何使用委托参数模拟泛型方法

时间:2019-05-08 11:28:20

标签: c# unit-testing moq

在抽象类中,我有一个带有此签名的虚拟方法。

public virtual async Task<TResult> MethodAsync<TParameters, TResult>(
        CommandFactory<TParameters> commandFactory,
        TParameters parameters,
        ModelAdapter<TResult> modelAdapter)
    { // method body }

CommandFactoryModelAdapter是具有此签名的委托。

public delegate DbCommand CommandFactory<in TParameters>(
    DbConnection connection,
    TParameters parameters);

public delegate TResult ModelAdapter<out TResult>(DbDataReader dataReader);

如何使用MethodAsync模拟Moq

1 个答案:

答案 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参数匹配器用于设置方法参数的期望值