В этом случае я написал бы два теста Pact и использовал бы состояние провайдера , чтобы сообщить провайдеру, какой из них производить.
Обоснование
Каждый отдельный тест пактаимеет ряд светильников. Мы назовем их P , X , Y , Z и O . Эти приборы используются для следующих утверждений:
- Когда вызывается код потребителя с некоторыми параметрами P
- Затем запрашивается X отправляется поставщику
- Когда поставщик находится в состоянии Y , он выдает ответ Z
- Когда потребитель получает ответ Z, объект домена O возвращается вызывающей стороне с шага 1.
Если в вашем тесте or
, у вас есть два различных значения Z . В свою очередь, у вас будет два разных значения O и либо два разных значения X и P , либо два разных значения Y (или оба), в зависимости от того, изменяется ли тип в Z в зависимости от запроса или нет.
Допустим, ответ в Z изменяется в зависимости от состояния провайдера (более простой случай). Если вы используете or
, ваш тест теперь будет выглядеть следующим образом
- Когда код потребителя вызывается с некоторыми параметрами P
- Затем запрос X отправляется поставщику
- Когда поставщик находится в состоянии Y-1 , он выдает ответ Z-1 , или если он находится в состоянии Y-2 выдает ответ Z-2
- Когда потребитель получает ответ Z-1 , объект домена O-1 возвращается вызывающей стороне с шага 1, или если потребитель получает ответ Z-2 , объект домена O-2 возвращается вызывающей стороне.
Это значительно сложнее, чем разделение на два теста.
Два теста
Тест одного может быть что-то вроде:
- Когда потребителькод вызывается с (независимо от параметров)
- Отправляется запрос на
LambdaDslObject
- Когда состояние провайдера равно
response is centPrecision
, он выдает:
"value": {
"type": "centPrecision",
"currencyCode": "EUR",
"preciseAmount": 2800,
"fractionDigits": 2 // <--- is not mandatory in this case
}
, который возвращает соответствующий объект домена вызывающей стороне.
И проверка два может быть что-то вроде:
- Когда код потребителя вызывается с (любые параметры)
- Отправляется запрос на
LambdaDslObject
- Когда состояние провайдера равно
response is highPrecision
, оно выдает:
"value": {
"type": "highPrecision",
"currencyCode": "EUR",
"centAmount": 2800, // <--- is not mandatory in this case
"preciseAmount": 2800,
"fractionDigits": 2
}
КакКроме того, помните, что ваш тест Pact должен описывать только те поля ответов, которые потребитель фактически использует - он не предназначен для полного описания полей, возвращаемых поставщиком. Таким образом, вы можете удалить необязательные поля из ответа.