內測試配置
爲測試內@Configuration的實施例:
@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
}
}
類級別的註解@RunWith(SpringRunner.class)
和@SpringBootTest
是彈簧引導1.4+,但內部的實施例即使對於使用@RunWith(SpringJUnit4ClassRunner.class)
和@SpringApplicationConfiguration
或@ContextConfiguration
的舊版本,@Configuration仍然有效。
@Primary
的@Primary
註解的bean定義是確保這一具有優先權如果不止一個被發現。
可重複使用的測試配置
如果你想重用多個測試的測試配置,您可以定義使用Spring配置文件@Profile("test")
一個獨立的配置類。然後,讓您的測驗班激活@ActiveProfiles("test")
的檔案。查看完整的代碼:
@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();
}
}
謝謝。我注意到我也可以通過在'src/test/java'上丟棄覆蓋'@ EnableAuthorizationServer'' @ Configuration'類來覆蓋所有測試中的類。 Spring引導規則:-) – NotGaeL
作爲旁註,如果你只需要在特定的'@ Configuration'上改變一個值,而不是覆蓋它,你可以爲你的測試啓用一個特定的spring引導配置文件(例如命名爲'test')在你的測試類中使用註釋'@ActiveProfiles({「test」,...})。然後在你的'@ Configuration'上有一個簡單的'if(Arrays.asList(environment.getActiveProfiles())。contains(「test」))''。 – NotGaeL
如果其他bean中有一個在內部使用,則由SomeBean類注入,您的解決方案將失敗。爲了使它工作,只需將ContextConfiguration類添加到SpringBootTest註釋使用的類的列表中。即:@SpringBootTest(classes = {Application.class,SomeTest.ContextConfiguration.class}) –