C# Pact.net:获取发送到模拟服务的请求
我正在开发人员解决方案中为一个服务编写测试,并使用pact模拟服务模拟其他第三方服务。 我需要验证发送到此模拟服务的请求。所以我需要得到实际发送的有效载荷。(实际存储在日志文件中以“Received request”开头的文件)C# Pact.net:获取发送到模拟服务的请求,c#,.net,mocking,pact,C#,.net,Mocking,Pact,我正在开发人员解决方案中为一个服务编写测试,并使用pact模拟服务模拟其他第三方服务。 我需要验证发送到此模拟服务的请求。所以我需要得到实际发送的有效载荷。(实际存储在日志文件中以“Received request”开头的文件) 我将非常感谢Pact为您验证消费者请求的帮助。看一看 对于消费者,测试过程是: 描述预期的请求 描述预期的响应 调用使用者用于生成响应的代码。(这一步实际上会命中模拟服务器——如果得到预期的请求,它将返回预期的响应) 验证使用者代码是否返回了预期数据 验证模拟服务器是否
我将非常感谢Pact为您验证消费者请求的帮助。看一看 对于消费者,测试过程是:
^这是验证发送的请求是否正确所需的步骤。您使用的是哪种模拟框架?我们能了解一下界面吗?Pact.Net-标题中提到过。哦正确的。它甚至在标签上。为了澄清您是否希望断言服务接收到的请求与您发送的请求相匹配?是的,请将此请求放入日志,但我需要一种方法来获取相同的请求(最好不要解析日志)。您是否特别需要存储在日志中的特定请求?或者这只是为了测试代码的功能?如果这不仅仅是一个测试,你需要这个请求做什么?谢谢。这是一个很好的答案。我试图理解当调用“VerifyInteractions”方法时,引擎盖下会发生什么。我调试了代码,发现它调用了一个名为“SendAdminHttpRequest”的方法,该方法使用path/interactions/verifications?example=something调用GET,然后使用字符串“InteractionMatched”获取响应。我无法理解测试主机如何理解这样一个GET调用,然后用“InteractionMatched”进行响应。为什么您需要了解引擎盖下发生了什么?模拟服务验证请求是否符合您在测试中设置的预期。我只是好奇,因为我想对我使用的工具有更深入的了解。我想出来了。这都是代码库的一部分。
_mockProviderService
.Given("There is a something with id 'tester'")
.UponReceiving("A GET request to retrieve the something")
.With(new ProviderServiceRequest
{
Method = HttpVerb.Get,
Path = "/somethings/tester",
Headers = new Dictionary<string, object>
{
{ "Accept", "application/json" }
}
})
.WillRespondWith(new ProviderServiceResponse
{
Status = 200,
Headers = new Dictionary<string, object>
{
{ "Content-Type", "application/json; charset=utf-8" }
},
Body = new //NOTE: Note the case sensitivity here, the body will be serialised as per the casing defined
{
id = "tester",
firstName = "Totally",
lastName = "Awesome"
}
}); //NOTE: WillRespondWith call must come last as it will register the interaction
var consumer = new SomethingApiClient(_mockProviderServiceBaseUri);
//Act
var result = consumer.GetSomething("tester");
//Assert
Assert.Equal("tester", result.id);
_mockProviderService.VerifyInteractions(); //NOTE: Verifies that interactions registered on the mock provider are called once and only once