有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从maven模块获取spring上下文

我在spring boot项目中进行测试时遇到了一个问题

architecture

正如你所看到的,我的项目由maven模块组成。 “alta launcher”是“主”项目,它将其他模块作为依赖项。 问题是,我在用户模块中的测试无法获取spring上下文,因此我的字段“Autowired”在运行时将为空

如何配置这个项目,使其能够在每个模块中进行测试

编辑:

@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不可用,因为我无法从用户模块访问launcher模块。如果没有属性(juste@SprinBootTest),则是当我获取autowire字段null时,这是有意义的,因为我没有上下文


共 (1) 个答案

  1. # 1 楼答案

    您可以在测试中重新创建自定义上下文,尝试以下操作:

    @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());
    }