我有一個單元測試,它包含一些數據庫的簡單操作。使用Spring Data和JPA實現與數據庫的交互。我的環境是Spring Boot 1.4
。在裝有數據庫的單元/集成測試中僅加載Spring Boot Data/JPA層
我的測試看起來像:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
@SpringBootTest(classes = {Application.class})
@Transactional
public class OrderRepositoryTest {
@Autowired
private OrderRepository orderRepository;
@Autowired
EntityManager entityManager;
@Test
public void can_create_and_find_one_order() {
String orderId = "XX_YY";
Order order1 = createAnOrder();
orderRepository.save(order1);
entityManager.flush();
entityManager.clear();
Order order2 = orderRepository.findOne(orderId);
Assertions.assertThat(order2).isEqualTo(order1);
}
}
凡應用是Spring引導入口點,並且包含EnableAutoConfiguration註釋:
@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan(basePackageClasses = {
WebMvcConfig.class,
ServicesConfiguration.class,
WebSecurityConfiguration.class
})
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
return applicationBuilder.sources(Application .class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
的測試並加載JPA層,並執行操作。但它也會加載MVC配置,安全配置以及大量其他未測試的圖層。
問題:我該如何替換EnableAutoConfiguration
並只加載我需要的JPA圖層?
理想的情況下,它會類似的方式,我可以用它從單元測試和應用程序的入口點延伸'WebMvcConfigurerAdapter',配置類,所以我的單元測試也驗證配置:
@Configuration
@EnableJpaRepositories(basePackages = "class.path.to.my.repositories")
public class PersistenceConfiguration {
// Whatever needs to be here
// ...
}
由於原始海報顯然需要事務性測試,因此您應該刪除'(propagation = Propagation.NOT_SUPPORTED)'(並重命名測試類)。否則,你的答案看起來不錯。 –
@SamBrannen是的,謝謝你的提醒。 –
如果我只是沒有任何修改就使用這個代碼,我得到錯誤'無法找到一個@SpringBootConfiguration,你需要使用@ContextConfiguration或@SpringBootTest(classes = ...)與你的測試' – jmgonet