본문 바로가기
📚Framework & Library/JUnit

[JUnit] JUnit의 개념과 기본 정리

by inbeom 2023. 9. 10.
728x90

💡 JUnit 이란?

TDD (Test-driven Development)

  • 테스트 주도 개발에서 사용하지만, 코드의 유지 보수 및 운영 환경에서의 에러를 미리 방지하기 위해서 단위 별로 검증하는 테스트 프레임워크이다.

단위 테스트

  • 작성한 코드가 기대하는 대로 동작 하는지 검증하는 절차.

JUnit

  • Java 기반의 단위 테스트를 위한 프레임워크.
  • Annotation 기반으로 테스트를 지원하며, Assert를 통하여 (예상, 실제) 검증.

Assert

assertArrayEquals(a, b)
배열 A와 B가 일치함을 확인

assertEquals(a, b)
객체 A와 B가 같은 값을 가지는지 확인

assertEquals(a, b, c)
객체 A와 B가 값이 일치함을 확인( a: 예상값, b:결과값, c: 오차범위)

assertSame(a, b)
객체 A와 B가 같은 객체임을 확인

assertTrue(a)
조건 A가 참인지 확인

assertNotNull(a)
객체 A가 null이 아님을 확인

 

Jacoco

  • Java 코드의 코드 커버리지를 체크하는 라이브러리
  • 결과를 html, xml, csv (Web) 으로 확인 가능하다.

사용 방법

  1. build.gradle 파일의 plugins{}에 id ‘jacoco’ 추가
  2. 우측 메뉴의 Gradle창 띄워서 Tasks → verification → test 눌러 실행
  3. 좌측의 프로젝트 메뉴에서 build → reports → jacoco → test → html → index.html 파일 웹으로 실행하여 결과값 보기


 

💡 Mock 이란?

실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법이다.

 

 💡 Mockito 어노테이션

@ExtendWith(MockitoExtension.class)

  • Mockito에서 제공하는 mock객체를 사용하기 하기 위해 위와 같은 어노테이션을 테스트 클래스에 달아준다.

@Mock

  • mock (가짜)객체를 생성한다.
  • 행동을 정의해주어야 한다.

@MockBean

  • 해당 객체를 MockContext에 등록하게 된다.
  • Mock객체 이며, InjectMocks이 작동하지 않게 된다.

@InjectMocks

  • @Mock이 붙은 객체를 @InjectMocks이 붙은 객체에 주입 시켜준다.
@Mock
MemberDao memberDao;

@InjectMocks
MemberService memberService;

@BeforeEach
void beforeEach() {
    System.out.println("@BeforeEach");
}

@Test
public void test(){
    when(memberDao.getMemberCount()).thenReturn(0);
    Member member = new Member("corn", 25);
    assertThat(memberService.createMember(member), is(member));
}

@AfterAll
static void afterAll() {
     System.out.println("@AfterAll");
}

실무에서는 @InjectMocks(Service) @Mock(DAO) 이런 식으로 Service테스트 mock객체에 DAO mock객체를 주입 시켜 사용한다.

 

728x90