JVM/JUnit7 [JUnit] JUnit의 Rollback 수행 관리 @Transactional method, class 단위로 설정 가능 테스트 시작 전 트랜잭션을 시작, 테스트 완료 후 항상 롤백하여 다음 테스트에 영향을 주지 않는다. class Test { @Test @Transactional void test1() { // ... } @Test void test2() { // ... } } @Rollback (false) class 단위 @Transactional 선언한 경우, 모든 메소드에 대해 적용된다. 이 때, 특정 메소드만 rollback 처리 제외되도록 설정 가능하다 @Transactional class Test { @Test void test1() { // ... } @Test @Rollback(false) void test2() { // ... } } .. JVM/JUnit 2023. 10. 3. [JUnit] 소개 - 6. MockMVC 란 ? MockMVC 테스트 코드를 작성하지 않은 경우, 포스트맨 등의 도구를 사용해 직접 호출해 서버를 디버깅해야하는데 MockMVC를 사용하면 이 과정을 건너뛸 수 있다 쉽게 말해, 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고도 스프링 MVC의 동작을 재현하여 컨트롤러를 호출해주는 클래스이다. import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest @AutoConfigureMockMvc MockMVC Method 요약 method 설명 perform 요청 전송 시 사용 .. JVM/JUnit 2023. 9. 30. [JUnit] 소개 - 5. BDDMockito 란? BDDMockito BDD (Behavior-Driven Development Mockito) : 행위 주도 개발 테스트 대상의 상태의 변화를 테스트하는 것으로, 시나리오를 기반으로 테스트하는 패턴을 권장한다. BDD 권장 패턴 : Given, When, Then Mockito 와 차이 코드로 살펴보자 Mockito Example (given, when, then) @ExtendWith(MockitoExtension.class) public class MockAnnotation { @Spy UserService userService; @Test void test() { User user = new User("heng", 29); // given when(userService.getUser()).thenR.. JVM/JUnit 2023. 9. 27. [JUnit] 소개 - 4. Mokitio 란 ? Mockito Mockito 란 ? 복잡하게 얽혀있는, 의존성을 가지는 객체들을 가짜 객체로 만들어 테스트할 수 있는데 이런 객체를 Mock 객체라고 한다. (참고) Mockito는 관리가 어려운 Mock 객체를 손쉽게 사용하도록 지원해주는 프레임워크다. Mockito 단계 Mock 객체 생성 Mock 객체 행동 (Stubbing) : when 메서드를 통해 원하는 동작을 미리 정하고 이를 기반으로 테스트한다. Mock 작동 검증 (Verify) : 호출 등이 정확히 됐는지 확인한다. Mock 생성 방식 mock Method import static org.mockito.Mockito.mock; public class MockStudy { private UserService userService; @Te.. JVM/JUnit 2023. 9. 26. [JUnit] 소개 - 3. Annotation (TestInstance, TestMethodOrder, Tag) @TestInstance 테스트 인스턴스의 라이프 사이클을 설정하는 어노테이션 명시적으로 지정되지 않은 경우 기본 값 : PER_METHOD 라이프 사이클 PER_METHOD : 각 테스트 메소드마다 인스턴스가 생성 PER_CLASS : 테스트 클래스별로 테스트 인스턴스 생성 Example (PER_METHOD) import org.junit.jupiter.api.Test class Test { int number = 0; @Test fun add1() { number++ System.out.println("[add1] number is " + number); } @Test fun add2() { number++ System.out.println("[add1] number is " + number); }.. JVM/JUnit 2023. 9. 21. [JUnit] 소개 - 2. Assertion 과 Assumption Assertion 실제 테스트에서 검증하고자 하는 내용을 확인하는 기능 org.junit.jupiter.api.Assertions.* Method 메소드명 설명 fail 무조건 실패 assertTrue 조건이 True 이면 성공 assertFalse 조건이 False 이면 성공 assertNull 조건이 Null 이면 성공 assertNotNull 조건이 Not Null 이면 성공 assertEquals 기대값(expected) 와 실제값(actual)이 동일하면 성공 assertArrayEquals 두 Array가 동일하면 성공 assertIterableEquals 두 Iterable이 동일하면 성공 assertLinesMatch 두 Stream이 동일하면 성공 assertNotEquals 기대값(ex.. JVM/JUnit 2022. 11. 1. [JUnit] 소개 - 1. 테스트 종류와 JUnit 이란 테스트의 종류 단위 테스트 (Unit Test) - TDD 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상 동작을 검증하는 테스트 테스트 대상 단위 클래스 메소드 테스트 단위의 크기 작을수록 복잡성이 낮아지고, 테스트 활용이 더 쉬워진다. 통합 테스트 (Integration Test) 단위 테스트보다 더 큰 동작을 위해 여러 모듈을 모아 의도대로 협력하는 지 검증하는 테스트 외부 라이브러리(API, DB 등..)까지 묶어 검증할 때 사용한다. 단위 테스트보다 더 많은 코드를 테스트하기 때문에 신뢰성이 떨어진다. 또한, 에러 발생 시 확인이 쉽지 않아 유지보수가 힘들다. 인수 테스트 (Acceptance Test) 사용자 시나리오에 맞춰 수행하는 테스트 단위/통합 테스트와 달리 비즈니스에 초점을 둔다 .. JVM/JUnit 2022. 11. 1. 이전 1 다음 추천 글 728x90 반응형