gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:20:50 28 4
gpt4 key购买 nike

我在为 SpringJUnit4ClassRunner.class 配置测试时遇到问题。我的问题是因为我的映射结构中的映射器在到达时返回 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. 通过@SpringBootTest(classes = {UserMapperImpl.class})注入(inject)映射器
    @Autowired
    私有(private) UserMapper userMapper;
  2. 只需初始化映射器private UserMapper userMapper = new UserMapperImpl()(并删除@Spy)

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

关于java - 如何使用 SpringJUnit4ClassRunner 将映射器(mapstruct)注入(inject)到 Junit 测试中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62287588/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com