Java 진영의 대표적인 단위 테스트 프레임워크
import org.junit.jupiter.api.*;
class CalculatorTest {
Calculator calculator;
@BeforeEach
void setUp() {
calculator = new Calculator();
System.out.println("BeforeEach 실행");
}
@AfterEach
void tearDown() {
System.out.println("AfterEach 실행");
}
@Test
@DisplayName("더하기 기능 테스트")
void add() {
int result = calculator.add(2, 3);
Assertions.assertEquals(5, result);
}
@Test
@DisplayName("빼기 기능 테스트")
void subtract() {
int result = calculator.subtract(5, 2);
Assertions.assertEquals(3, result);
}
}
메서드명_상황_기대결과 규칙을 사용하여 메서드명 작성@Test
@DisplayName("Given-When-Then 패턴 예시")
void add_2더하기3_결과는5() {
// Given
Calculator calc = new Calculator();
// When
int result = calc.add(2, 3);
// Then
assertEquals(5, result);
}
@Test
@DisplayName("0으로 나누면 예외 발생해야 함")
void divide_0으로나누기_예외() {
// Given
Calculator calc = new Calculator();
// When & Then
assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
}
한 단위가 의도대로 동작하는지를 독립적으로 검증하는 것
public PostDto creatPost(String username, String content) {
User user = userRepository.findUserByUsername(username).orElseThrow(
()-> new IllegalArgumentException("등록된 사용자가 없습니다.")
);
Post post = postRepository.save(new Post(content, user));
return PostDto.from(post);
}
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class PostServiceTest {
@Mock
private PostRepository postRepository;
@Mock
private UserRepository userRepository;
@InjectMocks
private PostService postService;
private User testUser;
private Post testPost;
@BeforeEach
void setup() {
testUser = new User("ravi", "1234", "ravi@example.com", 25, UserRoleEnum.ADMIN);
testPost = new Post("테스트 게시글입니다.", testUser);
ReflectionTestUtils.setField(testPost, "id", 1L);
}
@Test
@DisplayName("게시글 생성 성공")
void createPost_성공() {
// Given
when(userRepository.findByUsername("ravi")).thenReturn(Optional.of(testUser));
when(postRepository.save(any(Post.class))).thenReturn(testPost);
// When
PostDto result = postService.createPost("ravi", "테스트 게시글입니다.");
// Then
assertThat(result.getContent()).isEqualTo("테스트 게시글입니다.");
assertThat(result.getUsername()).isEqualTo("ravi");
verify(postRepository, times(1)).save(any(Post.class));
}
}