[ShowMyCNFT] JUnit을 이용한 단위테스트

junghan·2023년 4월 6일
0

SpringBootProject

목록 보기
14/35
post-thumbnail

JUnit이란?

JUnit은 자바 언어를 기반으로 하는 단위 테스트 프레임워크입니다. JUnit은 자바 개발 환경에서 사용되며, 자바 프로그램의 일부분을 테스트하는 데 사용됩니다.

JUnit은 테스트 코드 작성과 실행, 그리고 테스트 결과 분석과 보고를 제공합니다. JUnit은 테스트를 자동화하여 테스트를 효율적으로 수행할 수 있게 해주며, 테스트를 반복적으로 수행함으로써 코드의 신뢰성을 높일 수 있습니다.

JUnit은 다양한 어노테이션과 메소드를 제공하여 테스트 코드를 작성하는 것을 간편하게 만들어줍니다.
또한, JUnit을 이용하면 테스트를 실행하는 과정에서 예외가 발생할 경우, 예외 메시지와 함께 테스트를 실패시킬 수 있습니다. 이를 통해 개발자는 코드의 버그를 빠르게 찾아내고, 수정할 수 있습니다.


테스트 케이스 작성 방법론

Given-When-Then은 소프트웨어 테스트에서 사용되는 표준화된 테스트 케이스 작성 방법론 중 하나입니다.

  • Given: 테스트를 수행하기 위해 필요한 사전 조건을 설정합니다.
  • When: 테스트 대상에 대한 작업(동작)을 수행합니다.
  • Then: 작업(동작)을 수행한 결과를 검증합니다.

이 방법론은 테스트의 가독성과 유지보수성을 높이기 위해 고안되었습니다. Given-When-Then 방식으로 작성된 테스트 케이스는, 테스트를 수행하는 사람이 테스트 목적과 결과를 쉽게 이해할 수 있도록 도와줍니다.

예를 들어, 다음과 같은 Given-When-Then 테스트 케이스를 생각해보겠습니다.

makefileCopy code
Given: 계좌에 100,000원이 있을 때
When: 30,000원을 출금하면
Then: 계좌 잔액은 70,000원이 되어야 한다.

위 테스트 케이스에서는, 계좌의 초기 잔액을 Given으로 설정하고, 출금 작업을 When으로 수행합니다. 그리고 나서 출금 후의 계좌 잔액이 예상한 값과 일치하는지를 Then으로 검증합니다. 이렇게 Given-When-Then 방식으로 작성된 테스트 케이스는, 테스트를 수행하는 사람이 테스트의 목적과 결과를 명확하게 이해할 수 있도록 도와줍니다.


JUnit 작성방법

1. 테스트 클래스 작성

가장 먼저, 테스트할 코드에 대응하는 테스트 클래스를 작성합니다. 이때, 테스트 클래스는 보통 테스트할 코드의 클래스와 동일한 이름을 사용하며, 클래스 이름 끝에 "Test"를 붙여서 작성합니다.

  public class CalculatorTest {
      // 테스트 메소드들을 작성합니다.
  }

2. 테스트 메소드 작성

테스트 클래스에서는 각각의 테스트 케이스를 메소드로 작성합니다. 이때, 메소드 이름은 보통 "test"라는 접두사를 사용하여 작성합니다.

public void testAddition() {
    // 테스트할 코드를 작성합니다.
}

3. @Test 어노테이션 사용

JUnit에서는 테스트할 메소드에 @Test 어노테이션을 사용하여 테스트할 메소드임을 명시합니다.

@Test
public void testAddition() {
    // 테스트할 코드를 작성합니다.
}

4. assert 메소드 사용

JUnit에서는 assert 메소드를 사용하여 테스트 결과를 확인합니다. assert 메소드는 테스트 결과가 올바른지 여부를 검증하는 데 사용됩니다.

@Test
public void testAddition() {
    Calculator calculator = new Calculator();
    int result = calculator.add(2, 3);
    assertEquals(5, result);
}

위 코드는 Calculator 클래스의 add 메소드를 테스트하는 코드입니다. 이 코드에서 assertEquals 메소드는 result 값이 5인지 여부를 검증합니다.

5. assertThrows 메소드

assertThrows 메소드는 예외가 발생하는지 검증합니다.


@Test
public void testDivideByZero() {
    Calculator calculator = new
    Calculator();
    assertThrows(ArithmeticException.class, () -> calculator.divide(1, 0));
}

위 코드에서 assertThrows 메소드는 calculator.divide(1, 0)ArithmeticException 예외를 발생시키는지 검증합니다.

6. Before 메소드

@Before
public void setUp() throws Exception {
    // 테스트 전 필요한 초기화 작업 수행
}

@Before 어노테이션은 테스트 메서드가 실행되기 전에 실행됩니다. 일반적으로 테스트를 수행하기 전에 필요한 초기화 작업을 수행하는 데 사용됩니다.

7. After 메소드

@After
public void tearDown() throws Exception {
    // 테스트 후 필요한 정리 작업 수행
}

@After 어노테이션은 테스트 메서드가 실행된 후에 실행됩니다. 일반적으로 테스트를 수행한 후 정리(clean-up) 작업을 수행하는 데 사용됩니다. (테스트간 데이터 침범을 막기 위해)
여러 테스트가 동시에 수행되면 테스트용 데이터베이스인 H2 에 데이터가 그대로 남아 있어 다음 테스트 실행 시 테스트가 실패할 수 있습니다.

@Before와 @After 어노테이션을 사용하면, 테스트 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 또한, 테스트를 실행하기 전에 필요한 작업과 실행 후에 필요한 정리 작업을 자동으로 수행하여, 테스트를 보다 쉽게 작성하고 관리할 수 있습니다.


JUnit을 사용하여 단위 테스트를 작성하면, 코드의 신뢰성을 높일 수 있으며, 버그를 빠르게 찾아 수정할 수 있습니다. 또한, 단위 테스트는 코드를 작성하는 과정에서 코드의 일부분을 작게 만들어 테스트하기 때문에, 코드의 구조를 좀 더 명확하게 파악할 수 있습니다.

profile
42seoul, blockchain, web 3.0

0개의 댓글