| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- ResultType
- Thymeleaf
- assertequals
- git
- 배열
- passwordencoder
- CRUD
- WHEREIN
- JavaScript
- git amend
- JDBC
- MVC
- mybatis
- PathVariable
- SQL
- 부적합한열
- Java
- HTML
- Variabla
- springboot
- react
- git revase
- useContext
- BCryptPasswordEncoder
- 이딴게개발자
- oracle
- Spring
- localStorage
- content-box
- git reset
- Today
- Total
개발새발
[Java] JUnit 본문
코딩을 하다보면 팀원들이랑 내가 맞네 니가 틀렸네 하면서 싸울 일이 있다고 하는데..
그런 다툼을 미연에 방지(?)하게 해주는 방법 중 하나
바로 제이유닛(JUnit) 이렷다.
1. 제이유닛(JUnit)이란?
자바(Java)를 위한 테스트 프레임워크로, 소프트웨어 개발 단위 테스트를 작성하고 실행하는데 사용된다.
자동화된 테스트 케이스 실행과 테스트 결과 보고를 지원 및 품질 향상, 버그 식별에 도움을 준다.

이런 위키피디아st의 정직한 설명글은 내 머리로 이해 절대 불가능.
간단하게 말 하자면 작성한 코드가 의도대로 잘 작동하는지 그 기능을 테스트하면 된다고 보면 될 것같다.
예시를 통해서 이해해보자
1) 프로젝트에 제이유닛(JUnit) 활성화
프로젝트 폴더 > 우클릭 > Properties(속성) 선택 > JavaBuildPath > Library > ClassPath > 우측 add Library > JUit 선택
이 순서대로 선택하고 Apply 누르면 프로젝트에 JUnit5이 활성화 되어있는 것을 확인할 수 있다


2) 테스트케이스 (Test Case)
제이유닛의 종류 중 테스트케이스(Test Case)를 통해서 코드 기능을 테스트해보자.
이 때 각 테스트 케이스는 하나의 메서드로 표현이 되며, @Test < annotaion을 사용해서 명시한다
이때 사용하는 Assert 메서드 예시들...
이들은 테스트 결과를 검증하며, 예상결과와 실제 결과를 비교하고 차이가 있을 경우 테스트를 실패로 표시한다.
assertEquals(예상결과, 실제결과):
두 값이 동일할 경우 테스트 성공, 그렇지 않은 경우 실패
값의 타입이나 내용이 달라도 테스트가 실패한다
assertTrue(조건):
조건이 true인지 확인.
조건이 true이면 테스트 성공, false면 실패
assertFalse(조건):
조건이 false인지 확인.
조건이 false이면 테스트 성공, true면 실패
assertNotNull(객체):
주어진 객체가 null이 아닌지 확인.
객체가 null이 아닌경우 테스트 성공, null일 경우 테스트 실패
assertNull(객체):
조건이 null인지 확인.
조건이 null이면 테스트 성공, null이 아니면 실패
예제)
덧셈과 뺄셈 결과 값을 반환해주는 초간단 계산기를 만들어보자
package com.kh.testBA.before;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
그리고 나는 Assert 메서드를 통해서 위의 초간단 계산기가 잘 돌아가는지 확인하고싶다..
그래서 계산기 작동을 테스트할 수 있는 클래스를 추가로 만들어봤다
package com.kh.testBA.before;
// 테스트 위해 메서드 import
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
@Test // 테스트한다고 명시중..
public void testAddition() {
int result = cal.add(3, 4);
assertEquals(7, result); // 7과 reuslt 값이 같은지 비교
}
@Test
public void testSub() {
int result = cal.subtract(10, 5);
assertEquals(5, result); // 5와 result 값이 같은지 비교
}
}
히히.. 나는 asserEquals를 통해서 값을 비교해봐야지! ^^
3 + 4= 7, 10 - 5 = 5 니까 당연히 true가 나오겠지?! 냅다 실행


아차차 그 어느 곳에서도 Calculator 인스턴스를 생성하지 않았다! 당연히 결과가 나오지 않을 수밖에~
생각보다 기초적인 실수는 어디서든 나올 수 있다는 교훈을 또 마음 속에 새기며...
package com.kh.testBA.before;
// 테스트 위해 메서드 import
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
private Calculator cal = new Calculator(); //Calculator 인스턴스 생성
@Test
public void testAddition() {
int result = cal.add(3, 4);
assertEquals(7, result);
}
@Test
public void testSub() {
int result = cal.subtract(10, 5);
assertEquals(5, result);
}
}
인스턴스 생성해왔습니다 다시 실행해보겠어요

둘 다 true가 떴습니다~~~ 야호 드디어 정상작동 하는군요
그럼 이번엔 둘 모두에 틀린 값을 한번 넣어볼까요?
package com.kh.testBA.before;
// 테스트 위해 메서드 import
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
private Calculator cal = new Calculator(); //Calculator 인스턴스 생성
@Test
public void testAddition() {
int result = cal.add(3, 4);
assertEquals(8, result); // 8과 result 값이 같은지 비교
}
@Test
public void testSub() {
int result = cal.subtract(10, 5);
assertEquals(4, result); // 4와 result 값이 같은지 비교
}
}
크킄.. 오늘부터 3 + 4는 8이며, 10 - 5는 4다 이 멍청이들아

아닌건 아니라고도 해주고..
테스트기 성능 확실하네요 ㅎㅎ
그리고 아까 인스턴스를 생성하지 않은 상태로 실행한 결과와 달리 JUnit결과에 Failures가 2건이라고 뜨네요.
테스트기는 정상 작동했지만, 예상값이 달라서 실패했다고 하는 것입니다.
테스트 실행이 제대로 되지 않아 Error가 뜬 아까와는 다른 경우예요.
3) 테스트케이스(Test Case)로 배열값 비교하기
제가 여기서 얼마나 멍청한 짓을 했냐면요 (장장 이틀에 걸쳐...)...
다음에 이어서 작성할게요 눈물이 앞을 가림요 안녕...

'Java > 개념을 Java' 카테고리의 다른 글
| [Java] 상속(inheritance)과 super (1) | 2023.09.27 |
|---|---|
| [Java] Getter & Setter란 무엇인가? (0) | 2023.09.24 |
| [Java] 배열과 리스트 2 : ArrayList (0) | 2023.09.20 |
| [Java] 배열과 리스트 1 : Array ~ 다차원 배열 (1) | 2023.09.18 |
| [Java] API (1) | 2023.09.14 |