Как написать договор соглашения, который соответствует ключу ‘x’ либо объекту типа Y, либо Z

#java #pact

#java #договор

Вопрос:

Я пытаюсь написать тест на договорный контракт, охватывающий следующий сценарий. У меня есть потребитель, вызывающий GET, чтобы получить информацию о животном, будь то кошка или собака.

 response1:
{
   "animal" : {
      "type" : "Cat",
      "meow" : true
   }
}

response2:
{
   "animal" : {
      "type" : "Dog",
      "barks" : false
   }
}
  

В коде и Cat, и Dog являются подтипами класса Animal . Есть ли возможность написать контракт, ожидающий ответа, который будет содержать ключ «animal» со значением, соответствующим либо cat (ожидающему свойств «мяу» и «тип»), либо dog (ожидающему свойств «лает» и «тип»).

Другими словами. Есть ли возможность в Dsl Pact объявить, что под ключом «animal» может быть либо объект определения X, либо объект определения Y?

Комментарии:

1. что вы подразумеваете под договором? вы пытаетесь сослаться на условие ?.

2. Я имею в виду структуру тестирования контракта на пакт. Я изменил вопрос, чтобы быть более точным.

Ответ №1:

Нет, вам нужно написать два отдельных теста для этого сценария, чтобы доказать, что ваш код действительно может обрабатывать оба случая. Подумайте, если бы вы написали модульный тест, который принимал an Animal в качестве аргумента, но вел себя по-разному в зависимости от животного — вам нужно было бы протестировать его со всеми вариантами.

Аргумент аналогичен тому, почему мы не поддерживаем необязательные атрибуты (см. https://docs.pact.io/faq/#why-is-there-no-support-for-specifying-optional-attributes ).