簡體   English   中英

使用 Pact.IO (PactNet) 檢測重大變化

[英]Detecting breaking changes using Pact.IO (PactNet)

我正在嘗試使用 PactNet 進行合同測試。 在出現一些問題后,我設法啟動並運行它(消費者測試 -> 經紀人 -> 提供商測試),但有一件事讓我感到困惑:

假設我有一份合同:

/// <summary>
/// Weather forecast Id 
/// </summary>
public int Id { get; init; }

/// <summary>
/// Temperature in celsius
/// </summary>
public int Temperature { get; init; }

一切正常。 讓我們在生產者端更改 Temperature 字段的數據類型,並使其成為例如可為空的雙精度值:

/// <summary>
/// Weather forecast Id 
/// </summary>
public int Id { get; init; }

/// <summary>
/// Temperature in celsius
/// </summary>
public double? Temperature { get; init; } // Changed to nullable double

pact.json:

{
  "description": "A valid request for a single weather data",
  "providerStates": [
    {
      "name": "Weather forecast with id = 10 exists"
    },
    {
      "name": "Any tenant context"
    }
  ],
  "request": {
    "method": "GET",
    "path": "/WeatherForecasts/10"
  },
  "response": {
    "body": {
      "Id": 1,
      "Temperature": 6
    },
    "headers": {
      "Content-Type": "application/json; charset=utf-8"
    },
    "matchingRules": {
      "body": {
        "$.Id": {
          "combine": "AND",
          "matchers": [
            {
              "match": "integer"
            }
          ]
        },
        "$.Temperature": {
          "combine": "AND",
          "matchers": [
            {
              "match": "integer"
            }
          ]
        }
      },
      "header": {}
    },
    "status": 200
  }
}

針對當前協議運行測試時,似乎一切正常,測試將通過。 但這種類型的改變是一個突破性的改變。 Pact 不應該檢測到這種重大變化嗎? 這不就是它的目的嗎? 但是 pact.json 文件中沒有關於數據類型和可空性的信息。 到目前為止,我只能檢測到響應中缺少的屬性。

我錯過了什么嗎?

針對當前協議運行測試時,似乎一切正常,測試將通過。 但這種類型的改變是一個突破性的改變。 Pact 不應該檢測到這種重大變化嗎? 這不就是它的目的嗎? 但是 pact.json 文件中沒有關於數據類型和可空性的信息。 到目前為止,我只能檢測到響應中缺少的屬性。

是的,這是一個重大變化,如果您的提供商為該字段返回null ,它應該會解決這個問題。

如果您需要能夠支持可選字段(在消費者測試中),則需要測試這兩種情況。 有關更多信息,請參閱https://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM