Повторное использование контекста приложения Spring в различных тестах Spock - PullRequest
0 голосов
/ 10 апреля 2019

Я хотел бы повторно использовать один и тот же контекст Spring в нескольких интеграционных тестах, написанных на платформе Spock. Согласно документации контекстное кэширование основано на свойстве classes аннотации @ContextConfiguration.

Это пример теста:

@SpringBootTest
@ContextConfiguration(classes = Application.class)
class ExampleIntegrationTest extends Specification {

    def 'should reuse Spring context if already created'() {
        expect:
        1 == 1
    }
}

Второй тест также содержит такую ​​же аннотацию @ContextConfiguration, т.е.

@ContextConfiguration(classes = Application.class)

но когда я запускаю все тесты, я вижу в консоли, что контекст Spring создается для каждого теста. Я хотел бы кэшировать его между различными тестами. Я что-то пропустил? По сути, я хотел бы добиться того же, что описано здесь (вопрос stackoverflow) , но в Spock вместо JUnit.

1 Ответ

1 голос
/ 13 апреля 2019

Кэширование контекста выполняется Spring Framework, оно следует правилам, описанным здесь , т. Е. Оно строит ключ кеширования контекста с учетом различных факторов.Пока все они одинаковы, он использует один и тот же контекст.

  • местоположений (из @ContextConfiguration)
  • классов (из @ContextConfiguration)
  • contextInitializerClasses(из @ContextConfiguration)
  • contextCustomizer (из ContextCustomizerFactory)
  • contextLoader (из @ContextConfiguration)
  • parent (из @ContextHierarchy)
  • activeProfiles (из @ActiveProfiles)
  • propertySourceLocations (из @TestPropertySource)
  • propertySourceProperties (из @TestPropertySource)
  • resourceBasePath (из @WebAppConfiguration)

поддерживает Спок1027 * или любые другие аннотации теста Spring Boot, такие как @WebMvcTest, напрямую, и вы не должны добавлять явное @ContextConfiguration(classes = Application.class).

...