Test Wewnętrzna konfiguracja
Przykład wewnętrznej @Configuration dla badania:
@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
}
}
poziomie klasy adnotacje @RunWith(SpringRunner.class)
i @SpringBootTest
są Spring Boot 1.4+, ale przykład wewnętrzny @ Konfiguracja jest ważna nawet w starszych wersjach z użyciem @RunWith(SpringJUnit4ClassRunner.class)
i @SpringApplicationConfiguration
lub @ContextConfiguration
.
@Primary
@Primary
adnotacja w sprawie definicji ziarna jest zapewnienie, że ten będzie miał pierwszeństwo, jeśli więcej niż jeden znajdują.
wielokrotnego użytku konfiguracja testu
Jeśli chcesz ponownie użyć konfiguracji testowej dla wielu testów, można zdefiniować autonomiczną klasę konfiguracji ze sprężyną Profil @Profile("test")
. Następnie poproś swoją klasę testów, aby aktywowała profil pod numerem @ActiveProfiles("test")
. Zobacz pełny kod:
@RunWith(SpringRunner.class)
@SpringBootTests
@ActiveProfiles("test")
public class SomeTest {
@Autowired
private SomeBean someBean;
@Test
public void testMethod() {
// test
}
}
@Configuration
@Profile("test")
public class TestConfiguration {
@Bean
@Primary //may omit this if this is the only SomeBean defined/visible
public SomeBean someBean() {
return new SomeBean();
}
}
Dzięki. Zauważyłem, że mogę także przesłonić klasę we wszystkich testach, porzucając nadpisującą klasę '@ EnableAuthorizationServer'' Configuration w' src/test/java'. Reguły wiosennego startu :-) – NotGaeL
Jako sidenote, jeśli potrzebujesz tylko zmienić jedną wartość na konkretnej '@ Configuration', zamiast przesłonić to wszystko możesz włączyć specjalny profil startowy wiosennego (np. O nazwie' test') dla twoich testów za pomocą adnotacji '@ActiveProfiles ({" test ", ...})' na twoich testowych klasach. Następnie proste 'if (Arrays.asList (environment.getActiveProfiles()). Zawiera (" test "))' na twoim '@ Konfiguracja' zrobi. – NotGaeL
Twoje rozwiązanie nie powiedzie się, jeśli jedna z pozostałych fasoli używa wewnętrznie, jest wstrzykiwana przez klasę SomeBean. Aby to zadziałało wystarczy dodać klasę ContextConfiguration na liście klas używanych przez adnotację SpringBootTest. To znaczy: @SpringBootTest (classes = {Application.class, SomeTest.ContextConfiguration.class}) –