У меня есть приложение Spring Boot 2.1, использующее Spock 1.3 в Groovy 2.5 как:
org.spockframework:spock-core:1.3-groovy-2.5
Я пытаюсь создать интеграционные тесты (API, службы и т. Д.), В которых я высмеиваю другие микро-службы.Вот базовая спецификация, которая у меня есть:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class BaseSpecification extends Specification {
private DetachedMockFactory mockFactory = new DetachedMockFactory()
@LocalServerPort
int port
def getUrl() {
return "http://127.0.0.1:" + port + "/";
}
@TestConfiguration
static class Config {
def detachedMockFactory = new DetachedMockFactory()
@Bean
SecurityService securityService() {
return detachedMockFactory.Mock(SecurityService, name: "securityService")
}
}
И типичный тест выглядит так:
class ProjectControllerTest extends BaseSpecification {
@Autowired
private TestRestTemplate restTemplate;
@Autowired
SecurityService securityService
def "test missing API_Key "() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add(authHeader, authValue)
headers.add(keyName, keyValue)
HttpEntity<Project> request = new HttpEntity<>(project, headers);
when:
ResponseEntity<Project> responseEntity = restTemplate.postForEntity(getUrl(), request, Project.class)
then:
securityService.readJws(authValue) >> jwsResponse
responseEntity.status == result
where:
result | keyName | keyValue | authHeader | authValue | jwsResponse
401 | "API_Key" | "1234" | "Authorization" | getValidJWT() | buildManager()
// ...
}
Однако, когда я запускаю это, вызывается реальная служба, и я могу фактическишаг через отладчик.Я хочу, чтобы возвращалось значение, а не фактический вызов метода.У меня будет несколько внешних служб, которые будут проверены, чтобы можно было запускать тесты.
Что я делаю не так?