JUnit5 단위테스트

Seeun Park·2022년 3월 15일
0

JUnit 이란?

자바 프로그래밍 언어용 단위테스트(Unit Test) 프레임워크이다.

Gradle의 경우 build.gradle파일에 아래와 같이 작성하면 사용 가능하다

test {
    useJUnitPlatform()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

JUnit5 예시

@SpringBootTest
@Transactional
class MemberServiceTest {

    @Autowired
    MemberRepository memberRepository;
    @Autowired
    MemberService memberService;

    @Test
    public void 회원가입() throws Exception {
        //given
        Member member = new Member();
        member.setName("kim");

        //when
        Long savedId = memberService.join(member);

        //then
        assertEquals(member, memberRepository.findOne(savedId));
    }

    @Test
    public void 중복_예외() throws Exception {
        //given
        Member member1 = new Member();
        member1.setName("kim");

        Member member2 = new Member();
        member2.setName("kim");

        //when
        memberService.join(member1);

        //then
        assertThrows(IllegalStateException.class, 
        		() -> memberService.join(member2));
    }
}

위의 테스트에서 사용한 어노테이션은 아래와 같다.

@SpringBootTest : 스프링 부트 띄우고 테스트(이게 없으면 @Autowired가 실패한다)

@Transactional : 반복 가능한 테스트 지원, 각각의 테스트(각각의 테스트 메서드)를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤백(테스트 케이스에서 사용될 때만 롤백)

작성한 기능은 회원가입과 중복 회원 예외처리에 대한 단위 테스트이다.

출력값을 확인하는 경우에는 assertEquals를 사용했고 예외 처리의 경우는 assertThrows를 사용하고 람다식으로 확인하려는 코드를 넣었다.

JUnit4의 경우에는 예외처리 확인의 경우 테스트 어노테이션 옆에 ‘(expected = 예외.class)’를 넣었던 것과는 달리 결과 값으로 assertThrows를 작성한다.

TEST TIP

추가적으로 테스트 케이스를 작성할 시에 대체로 Given, When, Then으로 작성하면 좋다.

https://martinfowler.com/bliki/GivenWhenThen.html

0개의 댓글