Я написал очень простой контрактный тест для 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