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

bsxbgnwa  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(403)

在我的spring boot项目中进行测试时遇到了一个问题。
建筑学
正如你所看到的,我的项目被划分为maven模块。”AltaLauncher”是“主”项目,它将所有其他模块作为依赖项。问题是,我在用户模块中的测试无法获得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不可用,因为我没有从用户模块访问启动程序模块的权限。如果没有属性(juste@sprinboottest),当我得到autowire字段null时,这是有意义的,因为我没有上下文。

k7fdbhmy

k7fdbhmy1#

我可以通过使用contextconfiguration注解来解决这个问题(扩展为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());
}

这是我的configurationtest.java

@TestConfiguration
public class ConfigurationTest {

@Bean
UserQueryTransformer createUserQueryTransformer() {
    return new UserQueryTransformerImpl();
}

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
UserQueryDTO createUserQueryDTO() {
    return new UserQueryDTO();
}
vdgimpew

vdgimpew2#

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

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

相关问题