微软伪造通用方法的垫片

时间:2014-01-15 19:55:20

标签: c# generics microsoft-fakes

我没有弄清楚如何为特定的通用方法设置垫片。这是实际方法的签名:

public IEnumerable<TElement> ExecuteQuery<TElement>(TableQuery<TElement> query, TableRequestOptions requestOptions = null, OperationContext operationContext = null) where TElement : ITableEntity, new();

以下是我目前正在尝试(和失败)配置垫片的方法:

ShimCloudTable shimTable = new ShimCloudTable();
shimTable.ExecuteQueryOf1TableQueryOfM0TableRequestOptionsOperationContext<MyEntity> = (query, options, context) => {
    return new List<MyEntity>();
};

编译器只给我一些&#34;无效的表达式术语&#34;错误,显然我在这里遗漏了一些非常基本的东西。

编辑:这里是MS Fakes:

生成的垫片签名
public void ExecuteQueryOf1TableQueryOfM0TableRequestOptionsOperationContext<TElement>(FakesDelegates.Func<TableQuery<TElement>, TableRequestOptions, Microsoft.WindowsAzure.Storage.OperationContext, System.Collections.Generic.IEnumerable<TElement>> shim) where TElement : ITableEntity, new();

1 个答案:

答案 0 :(得分:22)

我找不到任何覆盖这个的官方文档,但问题毕竟很简单。我习惯于Fakes用于简单方法,你只需要将Func分配给你感兴趣的shimmed方法委托,就像这样:

shimAccount.CreateCloudTableClient = () => { return shimTableClient; };

但是,当涉及泛型时,Fakes会创建一个方法,该方法将Func作为参数而不是直接公开委托。所以我需要的是:

shimTable.ExecuteQueryOf1TableQueryOfM0TableRequestOptionsOperationContext<MyEntity>((query, options, context) =>
{
    return new List<MyEntity>();
});