Автор оригинала: mkyong.
В Spring Boot мы можем создать класс @TestConfiguration
для инициализации некоторых компонентов только для класса тестирования.
P.S Протестировано с пружинным ботинком 2
1. @Настройка теста + @Импорт
Этот @TestConfiguration
класс не будет обнаружен при сканировании компонентов, нам нужно импортировать его вручную.
package com.mkyong; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import java.time.Duration; @TestConfiguration public class TestConfig { @Bean public RestTemplateBuilder restTemplateBuilder() { return new RestTemplateBuilder() .basicAuthentication("mkyong", "password") .setConnectTimeout(Duration.ofSeconds(5)); } }
package com.mkyong; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.context.annotation.Import; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @Import(TestConfig.class) public class RestTemplateTest { @Autowired private TestRestTemplate restTemplate; @Test public void post_user_ok() { //... } }
2. @TestConfiguration + Внутренний статический класс
В качестве альтернативы, создайте внутренний класс, подобный этому:
package com.mkyong; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.test.context.junit4.SpringRunner; import java.time.Duration; @RunWith(SpringRunner.class) @SpringBootTest public class RestTemplateTest { @TestConfiguration static class TestConfig { @Bean public RestTemplateBuilder restTemplateBuilder() { return new RestTemplateBuilder() .basicAuthentication("mkyong", "password") .setConnectTimeout(Duration.ofSeconds(5)); } } @Autowired private TestRestTemplate restTemplate; @Test public void post_user_ok() { //... } }
Рекомендации
Оригинал: “https://mkyong.com/spring-boot/spring-boot-how-to-init-a-bean-for-testing/”