Отдельные взаимодействия Pact в тестах проверки провайдера по конечной точке - PullRequest
0 голосов
/ 11 февраля 2020

Я только начал применять тест Pact для моей системы, которая состоит из одного поставщика услуг и Angular внешнего интерфейса в качестве потребителя. Мне удалось настроить обе стороны, поэтому приложение Angular создает (один) файл pact с множеством взаимодействий с несколькими конечными точками службы моего провайдера. В провайдере я теперь сталкиваюсь с проблемой, что мой проверочный тест становится очень большим и чрезмерно сложным, так как мне нужно смоделировать все мои конечные точки в одном тесте со всеми их данными, например:

@Provider("example-backend")
@PactFolder("pacts")
@SpringBootTest(...)
class ComprehensivePactTest {

    [...]

    @State("healthy")
    fun `healthy state`() {
        whenever(exampleService.dosomething(any())).thenReturn(exampleResponse)
        whenever(otherService.somethingElse()).thenReturn(otherResponse)
    }
}

Есть ли способ отделить взаимодействие от файла пакта, чтобы у меня было несколько небольших проверочных тестов в моем провайдере? Например, я хотел бы иметь проверочный тест для всех запросов с путем, начинающимся с "/ example", и второй тест для пути, начинающегося с "/other".

Так что я бы предпочел иметь меньше Целенаправленный проверочный тест, например, так:

@Provider("example-backend")
@PactFolder("pacts")
@SpringBootTest(...)
class ExampleEndpointPactTest {

    [... include some filter logic here ...]

    @State("healthy")
    fun `healthy state`() {
        whenever(exampleService.dosomething(any())).thenReturn(exampleResponse)
    }
}

@Provider("example-backend")
@PactFolder("pacts")
@SpringBootTest(...)
class OtherEndpointPactTest {

    [... include some filter logic here ...]

    @State("healthy")
    fun `healthy state`() {
        whenever(otherService.somethingElse()).thenReturn(otherResponse)
    }
}

Или у меня ошибка в мышлении? Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2020

В файле Readme JUnit4 есть раздел об этой теме c. Я думаю, что это также относится к Junit5 https://github.com/DiUS/pact-jvm/tree/master/provider/pact-jvm-provider-junit#using -multiple-classes-for-state-change-method

Использование нескольких классов для методов изменения состояния

Если у вас есть большое количество методов изменения состояния, вы можете разделить вещи, переместив их в другие классы. Есть два способа сделать это: Использовать интерфейсы

Вы можете поместить методы изменения состояния на интерфейсы, а затем заставить ваш тестовый класс реализовать эти интерфейсы. См. StateAnnotationsOnInterfaceTest для примера. Укажите дополнительные классы для цели теста

Вы можете предоставить дополнительные классы цели теста с помощью методов withStateHandler или setStateHandlers. Для примера см. BooksPactProviderTest.

...