seong

Junit이란? 메서드 테스트 해보기 본문

Junit

Junit이란? 메서드 테스트 해보기

hyeonseong 2022. 9. 29. 22:37

Junit이란?

프로그램을 개발하면 작성된 모든 메서드에 대한 테스트 케이스를 만들고 의도대로 잘 동작하는지 테스트를 해야한다.

프로그램을 작은 단위, 하나의 메서드로 나누어 검사를 하게 된다. 

Junit은 Test를 조금 더 쉽게 도와주는 유닛 테스트 프레임 워크이다.

 

Junit에서 주로 사용되는 메서드

assertArrayEquals(a, b)  배열 a, b가 일치하는지 확인
assertEquals(a, b) 객체 a,b가 일치하는지 확인
assertSame(a, b) 객체 a,b가 같은 객체 인지 확인
assertTrue(a) a조건의 결과가 참인지 확인
assertNotNull(a) 객체 a가 null이 아닌지 확인

Junit 기본 어노테이션

@Test 테스트 모듈 만들어줌. (자주사용)
@DisplayName 테스트 클래스,메서드의 사용자 이름 정의
@ExtendWith 사용자가 정의한 확장명을 등록
@BeforeEach 테스트 메서드 전에 실행됨을 나타낸다.
@AfterEach 테스트 메서드 후에 실행됨을 나타낸다.
@BeforeAll 현재 클래스의 모든 테스트 메서드 전에 실행됨을 나타낸다.
@AfterAll 현재 클래스의 모든 테스트 메서드 후에 실행됨을 나타낸다.
@Disable 테스트 클래스 또는 메서드를 비활성화

실습

먼저 MyBatis Spring Boot Starter Test 를 자신의 Mybatis버전과 맞게 설치

본인은 2.2.2로 설치

Gradle에 복사

Junit으로 테스트해볼 프로젝트는 미리 만들어 놓았다.
https://github.com/seong9566/firstapp

1. ProductDaoTest.java  - 테스트 코드 작성

package site.metacoding.firstapp.domain.product;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.web.WebAppConfiguration;

//SpringBootTest 모든것을 다 메모리에 띄움
//Vscode에서 import 자동 입력 키 : alt + shift + o 

@SpringBootTest
public class ProductDaoTest {

    // 단위 테스트는 생성자 주입이 안된다.
    // 외부에서 주입할때 빈 생성자만 주입해준다.-> 생성자 주입이 필요하다!
    @Autowired
    private ProductDao productDao;

    // test는 절대 return이 안된다 void사용
    @Test
    public void findById_test() {
        // given - 받아야 할 것 ex) delete에선 id가 필요하다 id를 임의로 준다
        Integer productId = 1;

        // when - 테스트
        Product productPS = productDao.findById(productId);

        // then - 검증
        assertEquals("바나나", productPS.getProductName());
    }
}

Junit에서 메서드에 필요한 것들

1. given : 데이터를 임의로 만들어 넘겨주어야한다. 

ex)public void findById(Integer id) 이런 메서드에서 id값을 Junit에선 임의로 넘겨주어야한다.

2. when : 무엇을 테스트 할지 정해준다. 

3. then : 검증 위의 코드에선 findById, DB에서 값을 찾아오는 메서드이다.

id가 1인 DB가  "바나나"가 맞는지 확인을 한다. 

DB에서 확인하면 "바나나"의 ID는 1이다.

Test는 실행을 숫자 왼쪽 체크를 누르면 된다.

테스트로 넘겨주는id를 1(바나나)를 주고 테스트를 해보면 오류가 발생하지않는다. 

가장 왼쪽이 초록색이라면 통과 되었다는 뜻이다.

 

만약 id값은 1 - 바나나 이지만 검증할 값에서 딸기를 넣으면 test 실패라고 나온다

어노테이션 및 메서드 참고 - https://velog.io/@ehddek