我在编写测试代码时有一个问题。壮举JUnit

I have a question while writing the test code. feat JUnit

@RequiredArgsConstructor
@Service
public class UserServiceImpl implements UserService {

    private final UserMapper userMapper;

    @Transactional
    @Override
    public Long insertUser(UserSaveRequestDto userSaveRequestDto) {
        Long user_id = userMapper.insertUser(userSaveRequestDto);

        return user_id;
    }

}

我正在尝试测试服务层。

不知道哪一个需要进一步验证

下面的代码只是验证了是否调用了userMapper的insertUser或者参数是否正确包含,还需要做哪些额外的验证?

@ExtendWith(MockitoExtension.class)
public class UserServiceTest {

    @Mock
    UserMapper userMapper;

    @InjectMocks
    UserServiceImpl userService;

    UserSaveRequestDto userSaveRequestDto;

    UserResponseDto userResponseDto;

    @BeforeEach
    void setUp() {
        userSaveRequestDto = UserSaveRequestDto.builder()
            .userName("test")
            .userPhoneNumber("01026137832")
            .build();
    
        userResponseDto = UserResponseDto.builder()
            .userId(1L)
            .userName("test")
            .userPhoneNumber("01026137832")
            .build();
    }

    // Mockito 이용한 테스트 코드
    @DisplayName("Mock을 사용한 insertUser 테스트")
    @Test
    public void insertUser() {
        // given

        // when
        Long userId = userService.insertUser(userSaveRequestDto);

        // then
        ArgumentCaptor<UserSaveRequestDto> captor = ArgumentCaptor.forClass(UserSaveRequestDto.class);

        then(userMapper).should().insertUser(captor.capture());
        assertThat(captor.getValue()).isEqualTo(userSaveRequestDto);
    }

}

您应该测试 returned userId 是否具有预期值。告诉 userMapper 模拟 return 一个特定的值,并断言 userService return 也编辑了它。

assertThat(userId).isEqualTo(expectedIdValue);