单元测试ElasticSearch嵌套客户端-bulkall

omjgkv6w  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(415)

我正在为elasticsearch nest.net客户端编写一个单元测试。
在存储库类中有以下调用

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)

我不确定如何正确构造单元测试。
非常感谢您的帮助

ryoqjall

ryoqjall1#

我认为你的问题是你在处理超负荷的工作 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 类型需要替换为实际使用的类型。

相关问题