![](/img/trans.png)
[英]How to import Spring application context from another maven module?
[英]How to get spring context from maven module
我在嘗試在我的 spring-boot 項目中進行測試時遇到問題。
如您所見,我的項目由 maven 模塊組成。 “alta-launcher”是將所有其他模塊作為依賴項的“主”項目。 問題是我在用戶模塊中的測試不會得到 spring 上下文,所以我的字段“Autowired”在運行時將是 null。
任何想法如何配置這個項目以便能夠在每個模塊中進行測試?
編輯:
@SpringBootTest(classes = CoreApplication.class)
class UserQueryTransformerImplTest {
@Autowired
private UserQueryTransformer userQueryTransformer;
@Test
void toDTO() {
UserEntity userEntity = new UserEntity();
userEntity.setLogin("everest");
userEntity.setFirstName("Everest");
userEntity.setLastName("Mountain");
UserQueryDTO userQueryDTO = userQueryTransformer.toDTO(userEntity);
assertEquals(userEntity.getLogin(), userQueryDTO.getLogin());
assertEquals(userEntity.getFirstName(), userQueryDTO.getFirstName());
assertEquals(userEntity.getLastName(), userQueryDTO.getLastName());
}
帶有屬性類的注釋 @SpringBootTest 無法使用,因為我無法從用戶模塊訪問啟動器模塊。 沒有屬性(juste @SprinBootTest)是當我得到我的自動裝配字段 null 時,這是有道理的,因為我沒有上下文。
您可以在測試中重新創建自定義上下文,嘗試如下操作:
@ContextConfiguration
@RunWith(SpringRunner.class)
class UserQueryTransformerImplTest {
@TestConfiguration
static class Config {
@Bean
public UserQueryTransformer uqt() {
return new UserQueryTransformer();
}
}
@Autowired
private UserQueryTransformer userQueryTransformer;
@Test
void toDTO() {
UserEntity userEntity = new UserEntity();
userEntity.setLogin("everest");
userEntity.setFirstName("Everest");
userEntity.setLastName("Mountain");
UserQueryDTO userQueryDTO = userQueryTransformer.toDTO(userEntity);
assertEquals(userEntity.getLogin(), userQueryDTO.getLogin());
assertEquals(userEntity.getFirstName(), userQueryDTO.getFirstName());
assertEquals(userEntity.getLastName(), userQueryDTO.getLastName());
}
我能夠通過使用 ContextConfiguration 注釋來解決這個問題。 (ExtendWith 用於 junit5 部分)
@ContextConfiguration(classes = ConfigurationTest.class)
@ExtendWith(SpringExtension.class)
class UserQueryTransformerImplTest {
@Autowired
private UserQueryTransformer userQueryTransformer;
@Test
void toDTO() {
UserEntity userEntity = new UserEntity();
userEntity.setLogin("everest");
userEntity.setFirstName("Everest");
userEntity.setLastName("Mountain");
UserQueryDTO userQueryDTO = userQueryTransformer.toDTO(userEntity);
assertEquals(userEntity.getLogin(), userQueryDTO.getLogin());
assertEquals(userEntity.getFirstName(), userQueryDTO.getFirstName());
assertEquals(userEntity.getLastName(), userQueryDTO.getLastName());
}
這是我的配置Test.java
@TestConfiguration
public class ConfigurationTest {
@Bean
UserQueryTransformer createUserQueryTransformer() {
return new UserQueryTransformerImpl();
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
UserQueryDTO createUserQueryDTO() {
return new UserQueryDTO();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.