[JAVA] Unit Test

JunWoo An·2023년 11월 30일
0

스파르타코딩클럽

목록 보기
27/46

개발자들은 언제나 기능을 구현 후에 대해서도 생각을 하여야한다고 생각한다. exception과 같이 개발자가 예측가능한 예외상황이나 예측이 불가능한 상황등 여러 상황에 대해 최대한 많은 테스트를 거쳐야 한다.

위 그래프는 개발진행도에 따른 버그발생시 비용소모를 그래프화 한것이다. 한눈에도 알수있듯 버그 발견시기가 늦어질수록 해당 버그를 수정하기위한 비용이 기하급수적으로 늘어난다.

개발자가 기능을 구현하고 있는 시점에서 모든 버그를 잡을 수 있다면 최선의 결과일테지만 현실은 그것이 불가능하단건 우리 모두가 알것이라고 생각한다. 그렇기때문에 기능 구현이 끝난 후 테스트코드를 작성하여 프로그램을 테스트하는 과정이 필수적이게 된다.

이때 우리는 Unit Test(단위 테스트)기법을 사용하여 프로그램을 작은 단위까지 쪼갠 후 각단위가 정확하게 동작하는지 검사하는 테스트부터 시작하게 된다.

자바 프로그램에서는 자바 프로그래밍 언어 용 단위 테스트 프레임워크인 JUnit5을 사용하여 단위테스트를 진행한다.

해당 프레임워크에서 지원하는 에노테이션은 아래와 같다.

@BeforeEach : 각 테스트 코드가 실행되기전 수행되는 메서드 구현
@AfterEach : 각 테스트 코드가 실행 된 후 수행되는 메서드 구현
@BeforeAll : 모든 테스트 코드가 수행되기전 수행되는 메서드 구현
@AfterAll : 모든 테스트 코드가 수행된 후 수행되는 메서드 구현
@Nested : 주제 별로 테스트 코드를 묶어줌
@Order : 테스트 코드의 실행 순서를 지정할 수 있음

또한 Assertons분류의 메서드를 통해 해당 결과를 비교,판정이 가능하다.

Assertions.assertEquals(expected, actual) : 두개의 값이 같은지 판정
Assertions.assertTrue(boolean) : 해당 boolean 값이 true인지 판정
Assertions.assertNotNull(actual) : 해당 actual 값이 Null값인지 판정
Assertions.assertThrows(expectedType, executable) : 예외상황시 결과 판정

이러한 테스트 코드 작성 시 대표적으로 코드를 작성하는 방법이 있는데 바로
Given - When - Then 패턴이다.

Given

  • 테스트 하고자하는 대상을 실제로 실행하기 전에 테스트에 필요한 값(상태)을 미리 선언해 둡니다.

When

  • 테스트 하고자하는 대상을 실제로 실행 시킵니다.

Then

  • 어떤 특정한 행동(테스트 대상 실행) 때문에 발생할거라고 예상되는 결과에 대해 예측하고 맞는지 확인합니다.

계산기 연산 테스트 코드

    @Test
    @DisplayName("계산기 연산 성공 테스트")
    void test1() {
        // given
        int num1 = 5;
        String op = "/";
        int num2 = 2;

        // when
        Double result = calculator.operate(num1, op, num2);

        // then
        assertNotNull(result);
        assertEquals(2.5, result);
    }
profile
도전하는 사람

0개의 댓글