Контракт Spring Cloud: определение порядка выполнения сгенерированных тестов (более 10)

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

1) Я заключил два контракта в репо производителя (а именно one.yml, two.yml)

2) SCC автоматически сгенерировал тестовые примеры (JUNIT4) на стороне производителя, и они прошли (поскольку реализация уже выполнена)

3) Я создал тесты на стороне потребителя. Тесты на стороне потребителя смогли получить заглушенные ответы (из локального репозитория maven), и все работало, как ожидалось.

Теперь я хочу определить порядок этих тестов, чтобы one.yml всегда запускался перед two.yml. Итак, я создал сценарий с прямым вызовом, переименовал контракты в 1_one.yml и 2_two.yml и переместил их во вновь созданный каталог. После этого изменения:

1) Автогенерированные тесты на стороне производителя пройдены

2) Тесты со стороны потребителя не пройдены !!!

Не могли бы вы объяснить, почему это происходит и что мне нужно сделать, чтобы определить такой порядок тестов? (Мне нужно создать 10 контрактов yaml, и автоматически сгенерированные тесты должны иметь предопределенный порядок)


person Aman    schedule 24.04.2019    source источник


Ответы (1)


Добавляя префикс, вы создали сценарии. Итак, после выхода из состояния, описанного в первом контракте, вам удалось перейти в состояние два, описанное в контракте два. Вы можете прочитать документацию о сценариях.

Если вам нужно, чтобы они были в порядке, просто расположите их в алфавитном порядке, но вы не можете использовать цифру в начале

person Marcin Grzejszczak    schedule 24.04.2019
comment
Если вам нужно, чтобы они были в порядке, просто расположите их в алфавитном порядке. Вы имеете в виду, что я должен сделать следующее: 1) переименовать контракты в возрастающем алфавитном порядке 2) Добавить аннотацию @FixMethodOrder (MethodSorters.NAME_ASCENDING) в мой базовый тестовый класс? - person Aman; 24.04.2019
comment
Добавление FixedMethodOrder в базовый класс не работает, потому что это не унаследованное примечание. Эта аннотация должна быть указана на конкретных тестовых классах. Существует ошибка, открытая с 2012 г. (github.com/junit-team/junit4/issues/ 559), а некоторые люди из сообщества не хотят такого поведения. Есть ли у Spring Cloud Contract конфигурация, которую я могу использовать для добавления этой аннотации к сгенерированным классам? Или есть какой-нибудь другой обходной путь, чтобы добиться упорядочивания тестов? - person Aman; 24.04.2019
comment
Это обходной путь. В общем, принудительное упорядочение тестов не является распространенным и предлагаемым подходом, кроме сценариев. - person Marcin Grzejszczak; 24.04.2019
comment
Я не думаю, что мы когда-либо предполагали наличие более 9 сценариев. Вы можете создать проблему в репо контракта sc. В общем, я думаю, что вы пытаетесь воспроизвести бизнес-логику в своих контактах, что является ошибкой. Контракты должны быть предельно простыми, и вы пытаетесь настроить сложные заглушки с отслеживанием состояния. - person Marcin Grzejszczak; 01.05.2019
comment
Я изучил код контракта облака Spring и думаю, что создавать проблему не требуется. Я смог заставить это работать, запустив свои сценарии, такие как 01_one.yml, 02_two.yml вместо 1_step1, 2_step2: P. Итак, я думаю, что для этого просто требуется обновление документации. - person Aman; 01.05.2019
comment
Хорошо, я сделаю это. Спасибо. - person Aman; 01.05.2019
comment
Подскажите, пожалуйста, где мне делать PR для документации? (Я отредактирую ваш ответ или создам новый, прежде чем отмечать это как ответ) - person Aman; 01.05.2019
comment
Найдите документ о сценариях здесь github.com/spring-cloud/spring-cloud-contract/tree/master/docs/ или в любом файле adoc в репо - person Marcin Grzejszczak; 01.05.2019
comment
Давайте продолжим это обсуждение в чате. - person Aman; 01.05.2019