MS Lesson 19: Unit Test
1. Unit test klasinin uzerine: @ExtendWith(MockitoExtension.class)
2.
package guru.springframework.cruddemo.testing;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class CalculatorServiceTest {
@InjectMocks
private CalculatorService calculatorService;
@Test
public void whenSumTwoNumbersThenSuccess() {
// Arrange
// Act
int result = calculatorService.sum(5, 7);
// Assert
Assertions.assertThat(result).isEqualTo(12);
}
}
3.
package guru.springframework.cruddemo.testing;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class CalculatorServiceTest {
@InjectMocks
private CalculatorService calculatorService;
@Test
public void whenSumTwoNumbersThenSuccess() {
// Arrange
// Act
int result = calculatorService.sum(5, 7);
// Assert
Assertions.assertThat(result).isEqualTo(12);
}
@Test
public void whenFirstDivideSecondThenSuccess() {
// Arrange
// Act
int result = calculatorService.divide(10, 2);
// Assert
Assertions.assertThat(result).isEqualTo(5);
}
@Test
public void whenFirstDivideToZeroThenException() {
// Arrange
// Act
// Assert
Assertions.assertThatThrownBy(() -> calculatorService.divide(5, 0))
.isInstanceOf(ArithmeticException.class)
.hasMessage("/ by zero");
}
}
4. Parametrized test
@ParameterizedTest(name = "sum({0}, {1}) should be {2}")
@CsvSource({
"5, 7, 12",
"0, 0, 0",
"-1, 1, 0",
"100, 200, 300"
})
void whenSumTwoNumbersThenSuccess(int first, int second, int expected) {
int result = calculatorService.sum(first, second);
Assertions.assertThat(result).isEqualTo(expected);
}
5.
package guru.springframework.cruddemo.service.impl;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import guru.springframework.cruddemo.dto.response.AccountResponse;
import guru.springframework.cruddemo.entity.Account;
import guru.springframework.cruddemo.mapper.AccountMapperMapstruct;
import guru.springframework.cruddemo.repository.AccountRepository;
@ExtendWith(MockitoExtension.class)
class AccountServiceImplTest {
@Mock
private AccountRepository accountRepository;
@Mock
private AccountMapperMapstruct mapperMapstruct;
@InjectMocks
private AccountServiceImpl accountService;
@Test
void getById_whenAccountExists_returnsMappedResponse() {
// Arrange
Long id = 1L;
Account account = new Account();
account.setId(id);
account.setName("Ali");
AccountResponse expected = new AccountResponse();
expected.setName("Ali");
when(accountRepository.findById(id)).thenReturn(Optional.of(account));
when(mapperMapstruct.toResponse(account)).thenReturn(expected);
// Act
AccountResponse result = accountService.getById(id);
// Assert
assertThat(result).isEqualTo(expected);
verify(accountRepository, times(1)).findById(id);
verify(mapperMapstruct, times(1)).toResponse(account);
}
@Test
void getById_whenAccountNotFound_throwsRuntimeException() {
Long id = 99L;
when(accountRepository.findById(id)).thenReturn(Optional.empty());
assertThatThrownBy(() -> accountService.getById(id))
.isInstanceOf(RuntimeException.class)
.hasMessage("-------> Xeta");
verify(mapperMapstruct, never()).toResponse(any());
}
}
Комментарии
Отправить комментарий