Тест Spring Cloud Contract не может найти заглушки из пути к классам в Intellij - PullRequest
0 голосов
/ 09 мая 2020

Я написал очень простой контрактный тест для HTTP с помощью Spring Cloud Contract. Я создал производителя, у которого есть определение контракта в / src / test / resources / contract:

package contracts

import org.springframework.cloud.contract.spec.Contract

Contract.make {
    request {
        method 'GET'
        url '/documents/123456789'
        headers {
            contentType('application/json')
        }
    }
    response {
        status OK()
        body([
               id  : 123456789,
               status: "VALID"
        ])
        headers {
            contentType('application/json')
        }
    }
}

Производитель - это модуль maven с определением:

<groupId>com.sample</groupId>
<artifactId>rest-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rest-producer</name>

Я только развернул этого производителя в мой локальный репозиторий maven. После этого я создал потребителя с зависимостью от заглушек производителя:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>rest-producer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <classifier>stubs</classifier>
    <scope>test</scope>
</dependency>

и определил простой тест, который использует путь к классам для поиска заглушек:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = "com.sample:rest-producer:+:stubs:8080")
class DocumentReaderIntTest {
...
}

Когда я запускаю этот тест со сборкой maven через чистую установку работает нормально. Однако, когда я пытаюсь запустить этот тест через RunConfiguration из Intellij, я получаю исключение, что не удается найти заглушки. Что я должен настроить, чтобы этот тест работал и с Intellij?

Изменить: я обнаружил, что когда я открываю только проект потребителя, а затем в пути к классам у него есть jar из локального репозитория maven:

/Users/adam/.m2/repository/com/sample/rest-producer/0.0.1-SNAPSHOT/rest-producer-0.0.1-SNAPSHOT-stubs.jar

Однако, когда я импортирую производителя в тот же проект, он использует папку target / classes в пути к классам, поэтому не может найти определение контракта:

/Users/adam/projects/rest-producer/target/classes

1 Ответ

0 голосов
/ 20 мая 2020

Ага, это известная проблема с Intellij. Intellij, когда вы ссылаетесь на зависимость пути к классам в многомодульном проекте, не будет создавать банку заглушек, а будет напрямую ссылаться на код другого модуля. Может, имеет смысл подать вопрос в Intellij?

...