我在为 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());
}
最佳答案
我认为你有两个选择:
- 通过
@SpringBootTest(classes = {UserMapperImpl.class})注入(inject)映射器
和
@Autowired 私有(private) UserMapper userMapper;
- 只需初始化映射器
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/