【问题标题】:Pact.net contract pact file not created in specified directory, although test passedPact.net 合同协议文件未在指定目录中创建,尽管测试通过
【发布时间】:2021-10-14 07:19:15
【问题描述】:

这是我的 Pact 类的样子,您可以看到 PactDir 已指定。当测试通过时,它只创建日志文件夹/文件,而不是契约合约。

        PactBuilder = new PactBuilder(new PactConfig
        {
            SpecificationVersion = "2.0.0",
            PactDir = @"C:\temp\pacts",
            LogDir = @"c:\temp\logs"
        });

这就是测试文件的样子。使用 nUnit 框架。

    [Test]
    public void Consumer_Test()
    {
        //ARRANGE
        _mockProviderService
            .Given("Testing service")
            .UponReceiving("My API")
            .With(new ProviderServiceRequest
            {
                Method = HttpVerb.Post,
                Path = "/documents/",
                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
                {
                    id = 1,
                    name = "joe"
                }
            });


        //ACT
        var consumer = new ApiClient(_mockProviderServiceBaseUri);
        var result = consumer.GetStatusCode().GetAwaiter().GetResult();


        //ASSERT
        Assert.AreEqual(1, result.id);
        Assert.AreEqual("joe", result.name);

        _mockProviderService.VerifyInteractions();
    }

【问题讨论】:

    标签: testing qa pact contract pact-net


    【解决方案1】:

    您需要调用相关的生命周期方法以确保协议已写入 - 您是否设置了 disposebuilds the pact

    例如

      public void Dispose()
      {
        PactBuilder.Build(); //NOTE: Will save the pact file once finished
      }
    

    您可能会发现此研讨会对您有所帮助:https://github.com/pact-foundation/pact-workshop-dotnet-core-v1/blob/master/CompletedSolution/Consumer/tests/ConsumerPactClassFixture.cs#L56-L60

    【讨论】:

    • 是的,我有,它在 Pact 配置类中
    • 假设测试也通过了?日志文件是否表明存在问题/失败?也许值得加入 slack.pact.io 并在#pact-net 中与团队聊天。
    【解决方案2】:

    感谢来自 slack.pact.io 的 Matt 在#pact-net 聊天中提供以下解决方案。

    基本上,我们没有点击下面的代码

        public void Dispose()
        {
            PactBuilder.Build();
        }
    

    测试类必须实现 IDisposable,一旦我们这样做并点击上面的代码,它就可以工作,合约文件/协议文件就被创建了。您可能必须将 ContractPact.cs 中的所有 PactBuilder 代码放入测试类中并尝试。

    【讨论】:

      猜你喜欢
      • 2012-11-28
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多