일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 삼성
- 추석트래픽
- 운영체제
- 백준
- 다시보기
- 딥러닝
- 삼성SW역량테스트
- 정렬
- 마곡속눈썹펌
- 코딩테스트
- 투포인터
- leetcode
- level2
- ai/bigdata
- 직무면접
- 삼성 SW역량테스트 기출
- 포스코
- 카카오
- 프로그래머스
- OS
- 등촌동속눈썹연장
- Java
- 1차면접
- 시뮬레이션
- 마곡속눈썹연장
- 알고리즘
- BOJ
- 리트코드
- 등촌동속눈썹펌
- 수학
- Today
- Total
기록하는 습관을 들이자
[Java] JUnit을 이용한 단위 테스트 본문
* 해당 내용은 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 라이브러리 추가방법
-
프로젝트의 우클릭을 하여 Properties 선택
-
Java Build Path를 선택
-
Libraries 탭에서 Add Library 선택
-
선택하는 곳에서 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으로 단위테스트를 진행하면 어디서 오류가 났는지, 그리고 최적화된 코드를 유추해주기 때문에 훨씬 편하게 코드를 확인할 수 있습니다.
'알고리즘 > Java' 카테고리의 다른 글
[Java] GC(Garbage Collection) (0) | 2020.09.23 |
---|---|
[Java] JVM(Java Virtual Machine)의 구조와 원리 (0) | 2020.09.23 |
내가 정리하는 코딩테스트 문제 유형 별 풀이 방법 (8) | 2020.09.09 |
[알고리즘] 투 포인터(Two-Pointer Algorithm) 알고리즘 (0) | 2020.05.06 |
BigDecimal 클래스 - 오차 없는 부동 소수점 연산을 위한 클래스 (0) | 2020.04.15 |