三个要点,掌握Spring Boot单元测试( 二 )

  • Then: 检查或验证预期结果
  • doReturn/when 用于确定在给定指定参数时方法的行为方式 。但是 , 由于依赖项是 @Mock,并不会真正执行 。
    verify 用于检查被测试代码是否按照预期行为执行 。如果要测试的方法是 public void 类型,可以使用 verify 进行验证 。
    断言用于验证预期结果 。
    @ExtendWith(MockitoExtension.class)class UserServiceImplTest {@InjectMocksprivate UserServiceImpl userService;@Mockprivate UserRepository userRepository;private User user;public static final String MOCK_EMAIL = "mert@bahardogan.com";@BeforeEachvoid setUp() {user = new User();System.out.println("init");}@AfterEachvoid teardown() {System.out.println("teardown");}@ParameterizedTest@ValueSource(strings = {"mert@bahardogan.com", "info@gmail.com"})@DisplayName("Happy Path: save user use cases")void givenCorrectUser_whenSaveUser_thenReturnUserEmail(String email) {// givenuser.setUserName("mertbahardogan").setEmail(email).setPassword("pass");User savedUser = new User().setEmail(email);doReturn(savedUser).when(userRepository).save(any());// whenString savedUserEmail = userService.saveUser(user);// thenverify(userRepository,times(1)).findByEmail(anyString());verify(userRepository,times(1)).save(any());assertEquals(email, savedUserEmail);}@Test@DisplayName("Exception Test: user email must not be null case")void givenNullUserEmail_whenSaveUser_thenThrowsEmailMustNotNullEx() {// whenException exception = assertThrows(IllegalArgumentException.class, () -> userService.saveUser(user));// thenassertNotNull(exception);assertEquals(E_USER_EMAIL_MUST_NOT_BE_NULL, exception.getMessage());}@Test@DisplayName("Exception Test: user is already registered case")void givenRegisteredUser_whenSaveUser_thenThrowsUserAlreadyRegisteredEx() {// givenuser.setEmail(MOCK_EMAIL);Optional<User> savedUser = Optional.of(new User().setEmail(MOCK_EMAIL));doReturn(savedUser).when(userRepository).findByEmail(anyString());// whenException exception = assertThrows(IllegalArgumentException.class, () -> userService.saveUser(user));// thenassertNotNull(exception);assertEquals(E_USER_ALREADY_REGISTERED, exception.getMessage());}@Test@DisplayName("Exception Test: catch case")void givenIncorrectDependencies_whenSaveUser_thenThrowsGeneralSystemEx() {// givenuser.setEmail(MOCK_EMAIL);// whenException exception = assertThrows(IllegalArgumentException.class, () -> userService.saveUser(user));// thenassertNotNull(exception);assertEquals(E_GENERAL_SYSTEM, exception.getMessage());}@Test@DisplayName("Happy Path: find user by email")void givenCorrectUser_whenFindByEmail_thenReturnUserEmail() {// givenOptional<User> savedUser = Optional.of(new User().setEmail(MOCK_EMAIL));doReturn(savedUser).when(userRepository).findByEmail(anyString());// whenOptional<User> user = userService.findByEmail(MOCK_EMAIL);// thenverify(userRepository,times(1)).findByEmail(anyString());assertEquals(savedUser, user);}}UserServiceImpl测试类运行时长为1秒693毫秒 。
    三个要点,掌握Spring Boot单元测试

    文章插图




    推荐阅读