相关疑难解决方法(0)

如何(我应该)模拟DocumentClb进行DocumentDb单元测试?

从新的CosmosDb模拟器我得到了一个存储库来执行基本的documentdb操作,这个存储库被注入其他类.我想对基本查询进行单元测试.

public class DocumentDBRepository<T> where T : class
{
 //Details ommited...

    public IQueryable<T> GetQueryable()
    {
        return _client.CreateDocumentQuery<T>(
            UriFactory.CreateDocumentCollectionUri(_databaseId, _collectionId),
            new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true });
    }

    public async Task<IEnumerable<T>> ExecuteQueryAsync(IQueryable<T> query)
    {
        IDocumentQuery<T> documentQuery = query.AsDocumentQuery();
        List<T> results = new List<T>();
        while (documentQuery.HasMoreResults)
        {
            results.AddRange(await documentQuery.ExecuteNextAsync<T>());
        }

        return results;
    }


}
Run Code Online (Sandbox Code Playgroud)

此存储库需要一个文档客户端才能工作,它也会在构造函数上注入.

public DocumentDBRepository(string databaseId, IDocumentClient client)
{
    _client = client;
    _databaseId = databaseId;
    _collectionId = GetCollectionName();
}
Run Code Online (Sandbox Code Playgroud)

我最初的方法是使用CosmosDb模拟器,但这需要模拟器运行我不喜欢并使测试更慢.

我的第二种方法是尝试使用文档客户端的模拟.

var data = new List<MyDocumentClass>
{ …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq azure-cosmosdb

18
推荐指数
1
解决办法
7380
查看次数

在使用Linq查询的单元测试中模拟IDocumentQuery

我正在编写单元测试DocumentDBRepository但是我得到了一个空引用异常.我使用Moq框架和XUnit.

这是我DocumentDBRepository课堂上的方法.

public class DocumentDBRepository<T> : IRepository<T> where T: class
{
    private static string DatabaseId;
    private static string CollectionId;
    private static IDocumentClient client;
    public DocumentDBRepository(IDocumentClient documentClient, string databaseId, string collectionId)
    {
        DatabaseId = databaseId;
        CollectionId = collectionId;
        client = documentClient;
        CreateDatabaseIfNotExistsAsync().Wait();
        CreateCollectionIfNotExistsAsync().Wait();
    }

    public async Task<IDocumentQuery<T>> GetQuery(Expression<Func<T, bool>> predicate)
    {
        try
        {
            IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
          UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
          new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true })
          .Where(predicate)
          .AsDocumentQuery();

            return query;
        }
        catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

unit-testing moq azure asp.net-core azure-cosmosdb

6
推荐指数
1
解决办法
1168
查看次数

标签 统计

azure-cosmosdb ×2

moq ×2

unit-testing ×2

asp.net-core ×1

azure ×1

c# ×1