Исключите класс @SpringBootApplication для модульного тестирования с @RestClientTest - PullRequest
0 голосов
/ 09 марта 2020

У меня есть простой класс обслуживания, который использует 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), и я не хочу путать тестовый код с ложными ссылками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...