我正在从模拟调用转向elasticsearch(通过nest)使用 InMemoryConnection
类和一些硬编码的json来模拟一个真正的elasticsearch来回答来自c代码的请求。工作得很好,比mock好得多,mock需要深入理解和了解如何实现嵌套,并且很容易中断。
我的问题是,如果我想模拟对elasticsearch的多个调用,我看不到任何简单的方法。 InMemoryConnection
仅接受单个json字符串:
var connection = new InMemoryConnection(Encoding.UTF8.GetBytes(json));
可以这样说,第一次调用返回x,第二次调用返回y。
在验证对elasticsearch的调用时也存在类似的问题。我可以用 OnRequestCompleted
设置两个布尔值如下:
OnRequestCompleted(response =>
{
if (response.Uri.ToString().Contains("/blabla/_search")) {}
else if (response.HttpMethod == HttpMethod.POST && response.Success && response.Uri.ToString().StartsWith("http://localhost:9200/blabla"))
wasCalled = true;
else // We don't expect any other calls
failed = true;
})
当你对那些布尔值进行Assert的时候。但这感觉不对。
如有任何意见,我们将不胜感激。
1条答案
按热度按时间k3fezbri1#
InMemoryConnection
更倾向于单个请求/响应,而不是存根多个不同的请求/响应IConnection
可以从中派生出来达到这个目的类似这样的内容可能是对elasticsearch.net.virtualizedcluster的一个很好的补充。
在验证对elasticsearch的调用时也存在类似的问题。我可以使用onrequestcompleted设置几个布尔值,如下所示:
onrequestcompleted(response=>{if(response.uri.tostring().contains(“/blabla/\u search”)){}else if(response.httpmethod==httpmethod.post&&response.success&&response.uri.tostring().startswith(“http://localhost:9200/blabla“))wascalled=true;else//we't expected any other calls failed=true;})
而不是在
OnRequestCompleted
,我要么把电话录下来
TestConnection
并Assert他们是在那里被召唤的。不过,我想知道,以这种方式Assert的是什么,是否可以从回应中推断出来。或
Assert
response.ApiCall