Автор оригинала: 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/”