Giriş
Şu satırı dahil ederiz.
import org.springframework.boot.test.context.TestConfiguration;
Bu sınıf
- Hem tek başına test için kullanılabilir.
- Hem de @SpringBoot ile birlikte Integration Test için kullanılabilir.
Yani bu anotasyona sahip sınıf içinde test için gerekli beanler yaratılır.
Her iki kullanımda da bir ApplicationContext yaratılır.
Tek Başına Test İçin Kullanım
Tek başına kullanımı eski Spring ile gelen @ContexConfiguration ile aynı. Yani @TestConfiguration içinde tanımlı olmayan bir bean test ile aynı src paketinde olsa bile yüklenmez ve testte kullanılamaz.
Örnek
Şöyle yaparız
@ExtendWith(SpringExtension.class)public class EmployeeServiceImplTest {@TestConfigurationstatic class EmployeeServiceImplTestContextConfiguration {@Beanpublic EmployeeService employeeService() {return new EmployeeServiceImpl();}}@Autowiredprivate EmployeeService employeeService;@MockBeanprivate EmployeeRepository employeeRepository;// write test cases here}
@SpringBoot İle Integration Test İçin Kullanım
- Tüm uygulamadaki bean'lere ilave olarak bazı bean'leri daha ayağa kaldırmak isteyelim. SpringBootTest olarak işaretli sınıfın içinde static bir sınıf yaratılır ve bu sınıf @TestConfiguration olarak işaretlenir.
- Uygulamadaki bir bean'i override etmek isteyelim. Yine @TestConfiguration ile bunu yapabiliriz.
- Uygulamadaki bir bean'i override etmek isteyelim. Yine @TestConfiguration ile bunu yapabiliriz.
Bu anotasyonu kullanmak için iki yol var
1. Sınıfın testten farklı bir sınıfta tanımlı olması ve @Import ile teste dahil edilmesi
2. Sınıfın static bir inner class olması
Örnek
Genel kullanım için şöyle yaparız.
Genel kullanım için şöyle yaparız.
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class IntegrationTests {
// test methods
...
// test configuration
@TestConfiguration
static class TestSecurityConfig {...}
}
ÖrnekŞöyle yaparız. Burada test için TestRestTemplate sınıfının bazı özellikleri atanıyor.
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)class SampleWebClientTests {@Autowiredprivate TestRestTemplate template;@Testvoid testRequest() {HttpHeaders headers = this.template.getForEntity("/example", String.class)
.getHeaders();assertThat(headers.getLocation()).hasHost("other.example.com");}@TestConfiguration(proxyBeanMethods = false)static class Config {@BeanRestTemplateBuilder restTemplateBuilder() {return new RestTemplateBuilder().setConnectTimeout(Duration.ofSeconds(1)).setReadTimeout(Duration.ofSeconds(1));}}}
Hiç yorum yok:
Yorum Gönder