单元测试 Elastic Search Nest 客户端 - BulkAll

Unit testing Elastic Search Nest client - BulkAll

我正在为 ElasticSearch Nest .net 客户端编写单元测试。

我在存储库中有以下调用 class

var observable = _client.BulkAll(documents,
    selector => selector
        .BackOffTime("30s")
        .BackOffRetries(2)
        .RefreshOnCompleted()
        .Size(1000)
    ).Wait(
        TimeSpan.FromMinutes(15),
        next => {
            _logger.LogInformation($"Adding {next.Items.Count} number of items");
    });

在我的单元测试中我有:

client = Substitute.For<IElasticClient>();
await _repository.AddDocuments(documents);
_client.Received().BulkAll(Arg.Any<IBulkAllRequest<Purchase>);

但是 运行 我的单元测试

时出现以下异常
Value cannot be null. (Parameter 'observable')
   at Nest.Extensions.ThrowIfNull[T](T value, String name, String message)

我不确定如何正确构建我的单元测试。

非常感谢任何帮助

我认为您的问题是您正在使用此签名

处理 BulkAll 的过载
public BulkAllObservable<T> BulkAll<T>(IEnumerable<T> documents, Func<BulkAllDescriptor<T>, IBulkAllRequest<T>> selector, CancellationToken cancellationToken = default)

但是你准备了这个的替代品

public BulkAllObservable<T> BulkAll<T>(IBulkAllRequest<T> request, CancellationToken cancellationToken = default)

为了解决这个问题,我将按以下方式配置替代品

elasticClient
    .Received()
    .BulkAll(
        Arg.Any<IEnumerable<Document>>(),
        Arg.Any<Func<BulkAllDescriptor<Document>, IBulkAllRequest<Document>>>());

其中 Document 类型需要替换为您实际使用的类型。