joh*_*yka 4 testing elasticsearch nest
我一直在搜索我应该如何测试我的数据访问层而不是很成功.让我列出我的担忧:
这个人(这里:使用InMemoryConnection测试ElasticSearch)说:
虽然声明序列化形式的请求符合您在SUT中的期望可能就足够了.
断言请求的序列化形式是否真的值得?这些测试有什么价值吗?它似乎不太可能改变不应该更改序列化请求的函数.
如果值得,那么断言这些要求的正确方法是什么?
另一个人(这里:使用MOQ的ElasticSearch 2.0 Nest Unit Testing)显示了一个好看的例子:
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;}
}
Run Code Online (Sandbox Code Playgroud)
可能我错过了一些东西,但我看不出这段代码的重点.首先,他嘲笑一个ISearchResponse
总是返回people
列表.然后他嘲笑一个IElasticClient
将之前的搜索响应返回给他所做的任何搜索请求.
那么在那之后断言是真的并不让我感到惊讶.这类测试有什么意义?
对我来说,集成测试对测试数据访问层更有意义.所以经过一番搜索,我找到了这个(https://www.nuget.org/packages/elasticsearch-inside/)包.如果我没有弄错,这只是一个嵌入式JVM和ES.使用它是一个好习惯吗?我不应该使用我已经运行的实例吗?
如果有人对我没有包括的测试有很好的经验,我也很乐意听到这些.
您列出的每种方法都可能是一种合理的方法,具体取决于您尝试通过测试实现的目标.你没有在你的问题中指明这个:)
让我们回顾一下您列出的选项
因此,您需要问自己哪些类型的测试足以达到您要求断言您的系统正在按预期执行的操作所需的保证级别; 对于系统的不同元素,它可以是所有三种不同方法的组合.
您可能想要查看.NET客户端本身的测试方式 ; 有测试项目中的部件即旋转起来的Elasticsearch簇与安装不同的插件,与已知的生成的数据种子它并作出对结果的断言.源代码是在Apache 2.0许可下开放和许可的,因此可以随意使用项目中的元素:)
归档时间: |
|
查看次数: |
2481 次 |
最近记录: |