簡體   English   中英

如何從 maven 模塊獲取 spring 上下文

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM