기록하는 습관을 들이자

[Java] JUnit을 이용한 단위 테스트 본문

알고리즘/Java

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

myeongmy 2020. 9. 29. 21:54
반응형

* 해당 내용은 CS(Computer Science) 스터디를 진행하며 공부한 내용을 정리한 글입니다.

 

1. JUnit이란?

자바단위테스트(Unit Test) 도구 입니다.

 

2. 단위테스트(Unit Test)란?

  • 소스코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차입니다.

  • 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말합니다.

더보기

참고> 단위 테스트(Unit Test) vs 통합 테스트(Integration Test)

단위 테스트는 프로그램 내의 하나의 기능을 단위로 테스트를 수행하는 것을 의미합니다. 일반적으로 하나의 메소드, 함수를 대상으로 합니다.

통합테스트는 모듈을 통합하는 과정에서 모듈 간 호환성의 문제를 찾아내기 위해 수행되는 테스트입니다. 단위 테스트가 끝난 모듈들을 합치는 과정에서 문제가 없는지 확인하는 절차입니다.

3. 단위테스트의 중요성

  • 단위 테스트 코드를 작성해두면, 개발자가 나중에 코드를 리팩토링하거나 버전 업그레이드를 진행했을 때 기존의 기능이 올바르게 작동하는지 확인받을 수 있습니다.

  • 개발 초기 단계에 문제를 발견할 수 있습니다.

  • 단위 테스트는 기능에 대한 불확실성을 감소시켜줍니다.

 

4. JUnit의 특징

  • @Test 메서드가 호출될 때마다 새로운 인스턴스를 생성하여 독립적인 테스트가 이루어지게 합니다.

  • 단정(assert) 메소드로 테스트 케이스의 수행 결과를 판별할 수 있습니다.

  • JUnit 4부터는 어노테이션으로 간결하게 테스트를 지원합니다. (@Test @Before @After)

  • 결과는 성공(녹색), 실패(붉은색) 중 하나로 표시됩니다.

 

5. JUnit 라이브러리 추가방법

  1. 프로젝트의 우클릭을 하여 Properties 선택

  2. Java Build Path를 선택

  3. Libraries 탭에서 Add Library 선택

  4. 선택하는 곳에서 JUnit 선택하여 라이브러리 추가

이클립스 이용 시

(Spring으로 개발하시는 분들은 maven이나 gradle 빌드 툴을 이용하실 테니 pom.xml이나 build.gradle 파일에 의존성 추가만 해주시면 됩니다!)

 

6. 테스트 방법

테스트 클래스를 작성한 뒤, RunAs > JUnit Test를 클릭합니다.

  • 단위 테스트 성공시 화면(녹색)

  • 단위 테스트 실패시 화면(빨간색)

단위 테스트에 실패했다는 것은 해당 함수가 본래의 함수 요구사항 기능을 만족하지 못하고 있다는 뜻입니다.

 

7. assert 메소드 정리

assertArrayEquals(a, b) : 배열 A와 B가 일치함을 확인한다.

assertEquals(a, b) : 객체 A와 B가 같은 값을 가지는지 확인한다.

assertEquals(a, b, c) : 객체 A와 B가 값이 일치함을 확인한다.( a: 예상값, b:결과값, c: 오차범위)

assertSame(a, b) : 객체 A와 B가 같은 객체임을 확인한다.

assertTrue(a): 조건 A가 참인지 확인한다.

assertNotNull(a) : 객채 A가 null이 아님을 확인한다.

 

8. 테스트에 사용되는 어노테이션 정리

(1) 테스트 메소드 지정

@Test가 메소드 위에 선언되면 해당 메소드는 테스트 메소드임을 의미합니다.

@Test
public void testSum() {

}

 

(2) 테스트 메소드 수행시간 제한하기

**@Test(timeout=5000)**를 메소드 위에 선언합니다. 시간단위는 밀리 초 입니다. 이 테스트 메소드가 결과를 반환하는데 5,000밀리 초를 넘긴다면 이 테스트는 실패입니다.

@Test(timeout=5000)
public void testSum() {

}

 

(3) 초기화 및 해제

@BeforeClass, @AfterClass가 메소드 위에 선언되면 해당 테스트 클래스에서 딱 한 번씩만 수행되도록 지정하는 어노테이션 입니다.

@BeforeClass
public static void setUpBeforeClass() throws Exception {

}

@AfterClass
public static void tearDownAfterClass() throws Exception {

}

@Before, @After가 메소드 위에 선언되면 해당 테스트 클래스 안에 메소드들이 테스트 되기 전과 후에 각각 실행되게 지정하는 어노테이션 입니다.

@Before
public void setUp() throws Exception {

}

@After
public void tearDown() throws Exception {

}

 

버그를 확인하기 위해 System.out.println()으로 일일히 위치를 지정하여 확인할 수 있지만 소프트웨어의 규모가 커질수록 번거로운 작업이라고 생각합니다.

JUnit으로 단위테스트를 진행하면 어디서 오류가 났는지, 그리고 최적화된 코드를 유추해주기 때문에 훨씬 편하게 코드를 확인할 수 있습니다.

반응형
Comments