当前位置: 首页 > 知识库问答 >
问题:

如何用SpringJUnit4ClassRunner将映射器(mapstruct)注入到Junit测试中

漆雕令秋
2023-03-14

我在为SpringJUnit4ClassRunner.class)配置测试时遇到了问题。我的问题是因为我的映射器从map结构到达时返回null。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
class UserServiceTestSuite {
    @Spy
    private UserDto userDto;
    @Spy
    private UserMapper userMapper;
    @Mock
    private UserRepository userRepository;
    @InjectMocks
    private UserService userService;

    private User createUser() {
        return User.builder()
                .firstName("Steve")
                .lastName("Jobs")
                .login("SteveJobs")
                .password("password")
                .role(UserRole.ROLE_ADMIN)
                .build();

    }

    @Test
    public void testCreateUser() {
        //Given
        User user = createUser();
        Mockito.when(userRepository.save(user)).thenReturn(user);
        //When
        UserDto userDto = userService.createUser(userMapper.mapToUserDto(user));
        Long id = userDto.getId();
        //Then
        Assert.assertEquals("Steve", userDto.getFirstName());
        Assert.assertEquals("Jobs", userDto.getLastName());
        Assert.assertEquals("SteveJobs", userDto.getLogin());
        Assert.assertEquals("ROLE_ADMIN", userDto.getRole());
    }

共有1个答案

帅颖逸
2023-03-14

我认为你有两个选择:

  1. 通过@springboottest(classes={usermapperimpl.class})
    @autowired private UserMapper UserMapper;
  2. 注入映射器
  3. 只需初始化映射器private UserMapper UserMapper=new UserMapperImpl()(并删除@spy)

使用第二种方法时,您甚至可以删除@SpringBootTest,因为在给定的代码段中,您不需要Spring上下文(由注释创建)。
@RunWith(MockitoJUnitRunner.class)可以用于将用@Mock注释的对象自动注入UserService。在不创建spring上下文的情况下编写单元测试有助于降低测试套件的执行时间。

 类似资料:
  • 我试图用为MapStruct映射器编写单元测试。 单元测试类: 任何帮助都将不胜感激。

  • 当前有包含内部映射器的映射器(有时,它们本身包含其他内部映射器)。

  • 我正在使用MapStruct,mapstruct-jdk8版本1.1.0.final并定义我通过spring注入的抽象类。 我正在研究如何能够通过Junit测试来测试它们?我有一个基本的主映射器,它将使用2个子映射器 我尝试了几种方法,但无法正确实例化映射器来测试它。 java.lang.RuntimeException:java.lang.ClassNotFoundException:找不到Co

  • 我使用的是一个用MapStruct生成的映射器: 缺省组件模型是spring(在pom.xml中设置)

  • 我有下面的映射器类,我想在其中使用。我正在尝试构造函数注入,但不起作用,并且正在打印。 mapStruct实现类 如果我使用使用字段注入,这样它就可以正常工作。这意味着Spring不支持类的构造函数注入。是因为类不能直接实例化,需要子类来实例化吗? 有没有什么方法可以在实现类中创建一个构造函数,如下所示: 这样,构造函数注入应该可以工作。

  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?