【问题标题】:Unit testing Elastic Search Nest client - BulkAll单元测试 Elastic Search Nest 客户端 - BulkAll
【发布时间】:2020-09-28 11:28:48
【问题描述】:

我正在为 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)

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

非常感谢任何帮助

【问题讨论】:

  • BulkAll方法有两个重载,你用哪一个?
  • @rob 我已更新以排除我使用的重载

标签: c# unit-testing elasticsearch observable nest


【解决方案1】:

我认为您的问题是您正在使用此签名处理 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 类型需要替换为您实际使用的类型。

【讨论】:

  • 谢谢,我按照建议做了,只是将 Arg.Any&lt;IEnumerable&lt;Document&gt;&gt;() 替换为 documents
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2013-12-07
  • 2020-03-11
相关资源
最近更新 更多