C# Pact.net:获取发送到模拟服务的请求

C# Pact.net:获取发送到模拟服务的请求,c#,.net,mocking,pact,C#,.net,Mocking,Pact,我正在开发人员解决方案中为一个服务编写测试,并使用pact模拟服务模拟其他第三方服务。 我需要验证发送到此模拟服务的请求。所以我需要得到实际发送的有效载荷。(实际存储在日志文件中以“Received request”开头的文件) 我将非常感谢Pact为您验证消费者请求的帮助。看一看 对于消费者,测试过程是: 描述预期的请求 描述预期的响应 调用使用者用于生成响应的代码。(这一步实际上会命中模拟服务器——如果得到预期的请求,它将返回预期的响应) 验证使用者代码是否返回了预期数据 验证模拟服务器是否

我正在开发人员解决方案中为一个服务编写测试,并使用pact模拟服务模拟其他第三方服务。 我需要验证发送到此模拟服务的请求。所以我需要得到实际发送的有效载荷。(实际存储在日志文件中以“Received request”开头的文件)


我将非常感谢Pact为您验证消费者请求的帮助。看一看

对于消费者,测试过程是:

  • 描述预期的请求
  • 描述预期的响应
  • 调用使用者用于生成响应的代码。(这一步实际上会命中模拟服务器——如果得到预期的请求,它将返回预期的响应)
  • 验证使用者代码是否返回了预期数据
  • 验证模拟服务器是否收到了正确的请求
  • 我将步骤5加粗,因为这是检查请求的步骤

    (还要注意,如果请求不正确,步骤3不会生成正确的响应,因此步骤4几乎总是会失败)

    下面是我刚才列出的消费者测试步骤的细分:

    描述预期的请求 验证使用者代码是否返回了预期数据 验证模拟服务器是否收到了正确的请求
    ^这是验证发送的请求是否正确所需的步骤。

    您使用的是哪种模拟框架?我们能了解一下界面吗?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