Bu alan en önemli ve kullanımı karışık alan bu yüzden ayrı bir yazıya taşımak istedim. Açıklaması şöyle
1. Bu Alan Tanımlı DeğilseThe component classes to use for loading an ApplicationContext. Can also be specified using @ContextConfiguration(classes=...). If no explicit classes are defined the test will look for nested @Configuration classes, before falling back to a @SpringBootConfiguration search.
1.1 Bu Anotasyonla Beraber @ContextConfiguration Varsa
O zaman sanki bu alana değer tanımlanmış gibi @ContextConfiguration ile tanımlı bean'leri yükler.
@ContextConfiguration SpringBoot gelmeden önceki standart spring test anotasyonudur.
Örnek
Hem bu alana değer atamazsak ve tek bir bean ile ApplicationContext yaratmak istersek şöyle yaparız.
Hem bu alana değer atamazsak ve tek bir bean ile ApplicationContext yaratmak istersek şöyle yaparız.
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
@ContextConfiguration(classes = MyTestBean.class)
1.2 Test Sınıfı İçinde @Configuration Anotasyonu Varsa
@Configuration ile tanımlı bean'leri yükler
Örnek
Tüm uygulama yerine sadece belli bean'leri ayağa kaldırmak isteyelim. Test içinde @Configuration olarak işaretli static sınıf yaratırız. Şöyle yaparız.
Tüm uygulama yerine sadece belli bean'leri ayağa kaldırmak isteyelim. Test içinde @Configuration olarak işaretli static sınıf yaratırız. Şöyle yaparız.
@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {
@Configuration
static class ContextConfiguration {
@Bean
@Primary //may omit this if this is the only SomeBean defined/visible
public SomeBean someBean () {
return new SomeBean();
}
}
@Autowired
private SomeBean someBean;
@Test
public void testMethod() {
// test
}
}
1.3 Test Sınıfı İçinde @TestConfiguration Anotasyonu Varsa
Örnek
Tüm uygulamadaki bean'lere ilave olarak bazı bean'leri daha ayağa kaldırmak isteyelim. Test içinde @TestConfiguration olarak işaretli bir static sınıf yaratırız.
Tüm uygulamadaki bean'lere ilave olarak bazı bean'leri daha ayağa kaldırmak isteyelim. Test içinde @TestConfiguration olarak işaretli bir static sınıf yaratırız.
1.4 Test Sınıfı İçinde @Configuration Anotasyonu Yoksa
@SpringBootConfiguration anotasyonlu sınıfı arar ve onu yükler. Bu sınıf ta tüm Spring uygulamasıdır
Örnek
@SpringBootApplication olarak işaretli sınıfın paket olarak test sınıfının paketinde olması gerekir. Eğer @SpringBootApplication olarak işaretli sınıf bulunamazsa şu hatayı alırız.
Unable to find a @SpringBootConfiguration, you need to use
@ContextConfiguration or @SpringBootTest(classes=...) ...
2. Bu Alan Tanımlıysa
2.1 Sadece Belirtilen Sınıfları Yükler
Yüklenen sınıf yine @SpringBootApplication uygulaması olabilir
Örnek
Tüm uygulama yerine sadece belli bean'leri ayağa kaldırmak isteyelim. Elimizde şöyle bir kod olsun.
Tüm uygulama yerine sadece belli bean'leri ayağa kaldırmak isteyelim. Elimizde şöyle bir kod olsun.
@Configuration
public class ApplicationConfig {
@Bean
public MapperFactory mapperFactory() {
return new DefaultMapperFactory.Builder().build();
}
}
Şöyle yaparız.@SpringBootTest(classes = ApplicationConfig.class)
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
public class ProductSupplierIntegrationTests {
// tests
}
Örnek
Test sınıfımızın paketi şöyle olsun com.example.test.JpaTest
@SpringBoot olarak işaretli sınıfı com.example paketinde arar. Eğer sınıfımız com.example.Application ise sorun yoktur. Ancak sınıfımız com.example.application.Application ise hata alırız. Bu durumda en doğrusu @SpringBoot olarak işaretli sınıfı açıkça belirtmek. Şöyle yaparız
Yine aynı şekilde farklı bir paketteki tüm uygulamayı ayağa kaldırmak isteyelim. Elimizde şöyle bir kod olsun.
Test sınıfımızın paketi şöyle olsun com.example.test.JpaTest
@SpringBoot olarak işaretli sınıfı com.example paketinde arar. Eğer sınıfımız com.example.Application ise sorun yoktur. Ancak sınıfımız com.example.application.Application ise hata alırız. Bu durumda en doğrusu @SpringBoot olarak işaretli sınıfı açıkça belirtmek. Şöyle yaparız
@SpringBootTest(classes = Application.class)
ÖrnekYine aynı şekilde farklı bir paketteki tüm uygulamayı ayağa kaldırmak isteyelim. Elimizde şöyle bir kod olsun.
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Şöyle yaparız.@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTest{
@Autowire
Foo foo //whatever you are testing
@Test
public void FooTest() throws Exception{
Foo f = foo.getFooById("22");
assertEquals("9B". f.getCode);
}
}
Hiç yorum yok:
Yorum Gönder