У меня есть простой класс обслуживания, который использует RestTemplate
. Я тестирую его с помощью @RestClientTest
и ожидаю инициализации только необходимого компонента EJB
@SpringBootApplication
class DemoApplication {
@Bean fun restTemplate() = RestTemplateBuilder().build()
@Bean fun xyzService() = XyzService()
}
@Service
class MyServiceImpl(private val restTemplate: RestTemplate): MyService {
override fun fetch(id: String) {
print(restTemplate.getForObject(URI("http://localhost:9090"), String::class.java))
}
}
@RestClientTest(MyServiceImpl::class)
@AutoConfigureWebClient(registerRestTemplate = true)
class MyServiceTest {
@Autowired
private lateinit var mockServer: MockRestServiceServer
@Autowired
private lateinit var myService: MyService
@Test
fun test(){
mockServer.expect(ExpectedCount.once(), MockRestRequestMatchers.requestTo(URI("http://localhost:9090")))
.andExpect(MockRestRequestMatchers.method(HttpMethod.GET))
.andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body("hello world"))
myService.fetch("123")
}
}
. Я хочу исключить DemoApplication
из инициализации в тесте, только бины классов обслуживания, подлежащие тестированию. Проблема в том, что инициализация bean-компонента xyzService
завершается неудачно (он зависит от RabbitTemplate), и я не хочу путать тестовый код с ложными ссылками.