当前位置: 首页 > 面试题库 >

最小起订量的ElasticSearch 2.0嵌套单元测试

沃弘图
2023-03-14
问题内容

我在使用带有Nest的ElasticSearch创建用于搜索的单元测试时遇到问题。

单元测试

var mockSearchResponse = new Mock<ISearchResponse<Person>>();
mockSearchResponse.Setup(x => x.Documents).Returns(_people);

var mockElasticClient = new Mock<IElasticClient>();
mockElasticClient.Setup(x => x.Search(It.IsAny<Func<SearchDescriptor<Person>, SearchRequest<Person>>>())).Returns(mockSearchResponse.Object);
var service = new PersonService(mockElasticClient.Object);
var result = service.Search(string.Empty, string.Empty);
Assert.AreEqual(2,result.Count());

工作代码

results = ConnectionClient.Search<Person>(s => s.Index("person_index").Query(q => q.Term(t => t.Id, searchValue))).Documents;

即使执行以下操作,结果也始终为空

var temp = ConnectionClient.Search<Person>(s => s.Index("person_index").Query(q => q.Term(t => t.Id, searchValue)));

任何帮助,将不胜感激。


问题答案:

Func<T1, T2>传递给的签名It.IsAny<T>()不正确,因此设置期望将永远不会匹配。签名应为

It.IsAny<Func<SearchDescriptor<Person>, ISearchRequest>>()

一个完整的工作示例

void Main()
{
    var people = new List<Person>
    {
        new Person { Id = 1 },
        new Person { Id = 2 },
    };

    var mockSearchResponse = new Mock<ISearchResponse<Person>>();
    mockSearchResponse.Setup(x => x.Documents).Returns(people);

    var mockElasticClient = new Mock<IElasticClient>();
    mockElasticClient.Setup(x => x
        .Search(It.IsAny<Func<SearchDescriptor<Person>, ISearchRequest>>()))
        .Returns(mockSearchResponse.Object);

    var result = mockElasticClient.Object.Search<Person>(s => s);

    Assert.AreEqual(2, result.Documents.Count()).Dump();
}

public class Person
{
    public int Id { get; set;}
}

如果您不需要 存根 客户端,则只需使用真实客户端并将设置IConnection为的实例即可InMemoryConnection

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
// pass an instance of InMemoryConnection so that requests are not 
// **actually** sent
var connectionSettings = new ConnectionSettings(pool, new InMemoryConnection())
        .PrettyJson()
        .DisableDirectStreaming()
        .OnRequestCompleted(response =>
            {
                // log out the request
                if (response.RequestBodyInBytes != null)
                {
                    Console.WriteLine(
                        $"{response.HttpMethod} {response.Uri} \n" +
                        $"{Encoding.UTF8.GetString(response.RequestBodyInBytes)}");
                }
                else
                {
                    Console.WriteLine($"{response.HttpMethod} {response.Uri}");
                }

                // log out the response
                if (response.ResponseBodyInBytes != null)
                {
                    Console.WriteLine($"Status: {response.HttpStatusCode}\n" +
                             $"{Encoding.UTF8.GetString(response.ResponseBodyInBytes)}\n" +
                             $"{new string('-', 30)}\n");
                }
                else
                {
                    Console.WriteLine($"Status: {response.HttpStatusCode}\n" +
                             $"{new string('-', 30)}\n");
                }
            });

var client = new ElasticClient(connectionSettings);

这样,您还可以根据需要捕获请求。您可以更进一步,并创建自己的IConnection实现,该实现返回存根响应。



 类似资料:
  • 问题内容: 我有一个测试套件,其结构如下 在以上结构中,我想执行testmethod4()作为最后一个。即)最后执行。有一个@FixMethodOrder注释,它按顺序执行方法而不是testclass。是否有任何机制可以同时维护测试类和测试方法中的顺序。使用@FixMethodOrder,我可以通过重命名测试方法的名称来执行该方法,但是我不能指示junit将测试类作为最后一个(最后一个)执行。 问

  • 对Kotlin来说有点新,并测试它...我试图使用suspend方法测试dao对象包装器,该方法对SQL返回对象使用awaitFirst()。然而,当我为它编写单元测试时,它只是停留在一个循环中。我认为这是由于awaitFirst()不在相同的测试范围内 这是否意味着withContext将利用一个新线程,并在其他地方重用旧线程?这并没有真正优化任何东西,因为我仍然会有一个线程被阻塞,而不管产生一

  • 问题内容: 我正在尝试在python单元测试中模拟常量。 我有一个名为 settings.py 的模块,其中包含一组常量,特别是我有一个: 然后在另一个模块中,我有一个使用REL_PATH变量的函数,如下所示: 在我的单元测试中,我有以下代码: 我希望通过这种方式将在“另一个/自定义/路径/”路径下创建csv文件,但仍在原始目录中创建csv文件。 我也试图这样做: 但最终结果是相同的。 我究竟做错

  • 问题内容: 我想知道是否存在针对此类问题的简单解决方案。 我有一个对象注释,该对象注释又可以包含注释,并且这些注释也可以包含注释…并且此操作可以进行未知数量的循环。 这是数据结构的示例: 可以说我会写2级评论: 我该如何使div的嵌套注释达到“ n”级? 问题答案: 最简单的方法是创建通用部分,以便您可以使用递归调用和呈现它。 这是局部的: 数据模型应为列表。 我为您创建了一个演示,希望对您有所帮

  • 本文向大家介绍mockito 简单的最小Mockito测试,包括了mockito 简单的最小Mockito测试的使用技巧和注意事项,需要的朋友参考一下 示例 此示例显示了使用嘲笑的最小Mockito测试ArrayList:            

  • 我使用SockJS和StompJS,当我在浏览器中打开我的应用程序时,有时它会在连接到websocket之前尝试订阅一些主题。我希望主题订阅等待应用程序连接到websocket。 这就是我实现此代码的原因,我将其称为: 因此,我只在连接状态为时才订阅该主题,并且只有在客户端首次成功连接时才会调用该主题。 我想稍后从主题中取消订阅,所以我需要内部订阅返回的对象,我还需要内部订阅的消息。 我所实现的很