수업 시간에 배웠던 JUnit5 단위 테스트를 작성해볼까 한당!ㅇㅅㅇ

 

우선! 간단하게 단위 테스트가 무엇인지 정리하고 실습을 할 것이다. 

(진짜 간단하게........)

 

1. 단위 테스트  

단위 테스트는 가장 기본적인 테스트 활동이다. 

 

1-1) 단위 테스트 특징

  • 개발 환경에서 수행
  • 단위(주로 module, component, sub program, class, method) 간의 연계는 고려하지 않으며 단위 내부의 결함 제거가 목적
  • 주로 구조 기반 테스트 설계 기법을 사용 (Whitebox Test)
Q) Whitebox vs Blackbox ??

소프트웨어 테스트 방법론 2가지를 소개하면 화이트박스와 블랙박스이다.

Whitebox = 구조 기반 : 구조(structure based)를 기반으로 하는 테스트로, 내부구조를 분석해 테스트 케이스 도출. (단위 테스트는 개발 환경에서 수행하니까 여기에 해당)

Blackbox = 명세 기반 : 사용자가 요구하는 기능을 측정하기 위해서 내부구조를 모르는 상태로 테스트를 진행하는 방법 

경험 기반 : 테스트 엔지니어의 경험, 지식과 직관에 기반하여 테스트 케이스 도출

 

<whiteBox 테스트>

화이트 박스 테스팅을 하기 위해서는 프로그램 내부 구조를 분석해야 한다. 

그리고 테스트하려는 단위를 결정할 때 프로그램 코드상의 수행경로를 정의하고, 그 경로를 커버하는 테스트 케이스를 수행하면 된다. 

 

코드 적용 수준, 즉 수행범위(레벨)에 따라 구문 커버리지, 결정 커버리지, 조건 커버리지 등  있다.

 

 

 

1-2) 단위 테스트 목표

그러면 이번에 실습해볼 구조 기반인 단위 테스트의 목표는 무엇인가!?

 

  • 프로그램상의 모든 경로들을 최소한 한 번은 테스트하는 것

 

2. JUnit5 실습 

실습을 해볼 것은 자바에서 동작하는, 아키텍처가 필요없는 하나의 모듈이 하나의 프로그램이 되는 요구사항이 있었고, 

이것을 가지고 단위 테스트를 할 것이다. 

 

 

2-1) 테스트 대상 - 삼각형 종류 

 

Q) 삼각형의 변의 길이를 나타내는 세 정수 값을 입력하여 삼각형이 부등변 삼각형인지, 이등변 또는 정삼각형인지 보여준다.

 

먼저 소스 코드를 작성한다.

> 코드 참고

더보기
import java.util.Scanner;

public class TriangleProperty {

  public static void main(String[] args) {

    int a, b, c;
    String result;

    Scanner scanner = new Scanner(System.in);
    a = scanner.nextInt();
    b = scanner.nextInt();
    c = scanner.nextInt();

    scanner.close();

    result = classifyTriangle(a, b, c);

    System.out.println(result);
  }

  public static String classifyTriangle(int a, int b, int c) {

    if ((a + b <= c) || (a + c <= b) || (b + c <= a))
      return "Invalid";

    if (a == b && b == c)
      return "정삼각형";

    if (a == b || b == c || a == c)
      return "이등변삼각형";

    return "비등변삼각형";
  }

}

 

 

앞에서 말한

"그리고 테스트하려는 단위를 결정할 때 프로그램 코드상의 수행경로를 정의하고, 그 경로를 커버하는 테스트 케이스를 수행하면 된다. "

=> 여기서 세 정수를 입력 받아 정삼각형인지 이등변, 비등변삼각형인지 알아보는 수행경로를 정의했고, 

     classifyTriangle 메소드 단위를 테스트할 것이다.

 

 

 

JUnit5 도구를 사용할 것인데 JDK에 설치되어 있다.

프로젝트 오른쪽 버튼을 눌러서 Build Path > Add Libraries 눌러서  JUnit 선택하면 된다.

 

2-2) 테스트 실행 

 

그리고 작성한 TriangleProperty.java 클래스 파일에 오른쪽 버튼을 눌러서 JUnit Test Case 선택해서 생성해준다.

 

 

> 코드 참고

더보기
package communication;

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;


class TrianglePropertyTest {

  @Test
  final void 정삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 1, 1);
    assertTrue(result.contentEquals("정삼각형"));
  }

  @Test
  final void 이등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(2, 2, 3);
    assertTrue(result.contentEquals("이등변삼각형"));
  }

  @Test
  final void 삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 2, 3);
    assertTrue(result.contentEquals("Invalid"));
  }

  @Test
  final void 비등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(3, 4, 5);
    assertTrue(result.contentEquals("비등변삼각형"));
  }


}

 

 

알아보기 쉽도록 일단 메소드명을 한글로 작성했다. 

이렇게 코드를 작성해주고 아래처럼 Coverage As > JUnit Test 실행한다.

 

테스트가 잘 되었다면 아래처럼 파란색으로 표시가 된다. 틀렸을 경우에는 빨간색으로 표시가 된다.

>코드 참고

더보기
package communication;

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;


class TrianglePropertyTest {

  @Test
  final void 정삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 1, 1);
    assertTrue(result.contentEquals("정삼각형"));
  }

  @Test
  final void 이등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(2, 2, 3);
    assertTrue(result.contentEquals("이등변삼각형"));
  }

  @Test
  final void 삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 2, 3);
    assertTrue(result.contentEquals("Invalid"));
  }

  @Test
  final void 비등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(3, 4, 5);
    assertTrue(result.contentEquals("비등변삼각형"));
  }


}

 

 

아래 Coverage를 봐도 TrianglePropertyTest.java 보면 커버리지가 100%된 것을 확인할 수 있다. 

되도록이면 커버리지가 100% 가깝게 해주는게 좋다.

 

여기서!!!!

TriangleProperty.java를 보면 57.6% 밖에 안되어있는데 신경쓰지 않아도 된다. 

위에 빨간 부분들은 적용 범위가 아니기 때문에..

그리고 또 하나!!!더!!

노란색으로 표시되어있는 것은 모든 경우의 수를 충족하지 않았을 경우이다. 

 

노란색을 초록색으로 바꾸고 싶다면 아래처럼 모든 경우를 다 작성해서 테스트하면 된다.!

+ Recent posts