목차
- 테스트 시나리오
- JUnit
2-1. JUnit 라이브러리
2-2. 단위 테스트(Unit Test) - 어노테이션(Annotation)
3-1. @Before
3-2. @After
3-3. @Test
3-4. @Ignore - assertEquals(a, b);
- 테스트 예시
1. 테스트 시나리오
- 테스트 시나리오는 애플리케이션의 테스트되어야 할 기능이나 특징을 한 문장으로 기술한 것을 말한다.
/* Calculator 인스턴스 생성이 잘되는지 테스트 */
Calculator calc = new Calculator();
if(calc != null) {
System.out.println("성공");
} else {
System.out.println("실패");
/* sumTwoNumber 메소드가 정상 기능하는지 테스트 */
/* 4와 5를 더하면 합계 9가 되는지 확인 */
int result = calc.sumTwoNumber(4, 5);
if(result == 9) {
System.out.println("4와 5를 전달하여 합계가 9인지 확인");
} else {
System.out.println("4와 5를 전달하여 합계가 9가 아님");
}
.
.
2. JUnit
2-1. JUnit 라이브러리
- 프로젝트명에서 우클릭 → Properties → Java Build Path → Libraries → Classpath → Add Library... 선택한다.
- Add Library 창이 뜨면 JUnit 선택하고 → Finish 클릭 → Apply and Close 통해 적용한다.
2-2. 단위 테스트(Unit Test)
- 하나의 기능에 대해 테스트하는 것을 단위 테스트, 유닛(unit) 테스트라고 칭한다.
- 즉 소프트웨어 설계 최소 단위에 초점 맞춰 진행되는 테스트이다.
- 클래스명 뒤에 Tests 명시한다: CalculatorTests, OrderDAOTests...
3. 어노테이션(Annotation)
3-1. @Before
- 임포트 처리를 필요로 한다: import org.junit.Before;
- @Test가 작성된 메소드 호출 이전에 수행되어야 할 것으로, 반복되는 준비 작업을 담은 메소드에 쓴다.
- @Before 어노테이션을 명시해두면 @Test 메소드 실행 전에 자동 수행된다.
3-2. @After
- 임포트 처리를 필요로 한다: import org.junit.After;
- @Test가 작성된 메소드 호출 이후에 수행된다.
❗ 다시 말해 필요에 따라서 테스트 사전 설정에 @Before, 테스트 사후 제거 과정에 대해 @After 쓸 수 있다.
3-3. @Test
- 임포트 처리를 필요로 한다: import org.junit.Test;
- 테스트할 메소드로서 지정하는 것이다.
3-4. @Ignore
- 임포트 처리를 필요로 한다: import org.junit.Ignore;
- 테스트에 포함하지 않고자 하는 메소드에 대해 무시하도록 부여한다. 두 메소드 중 하나에 대해 @Ignore 처리했을 경우 다음과 같은 안내말을 결과창에서 확인할 수 있다: Runs: 2/2(1 skipped)
4. assertEquals(a, b);
assertArrayEquals(a, b) : 배열 a와 b가 일치하는지 확인
assertEquals(a, b) : 객체 a와 b의 값이 같은지 확인
assertSame(a, b) : 객체 a와 b가 같은 객체인지 확인
assertTrue(a) : a가 참인지 확인
assertNotNull(a) : a 객체가 null이 아님을 확인
.
.
@Test
public void testSumTwoNumber_6과_7을_전달하면_합계가_13이_계산되는지_확인() {
System.out.println("테스트 동작");
int result = calc.sumTwoNumber(6, 7);
assertEquals(12, result, 1);
- assertEquals() 인자로 (예상값, 실제값, 허용오차)를 전달할 수도 있다.
- 임포트 구문 작성을 필요로 한다: import static org.junit.Assert.assertEquals;
5. 테스트 예시
package com.reminder.section03.layertests.model.dao;
import static com.greedy.common.JDBCTemplate.getConnection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.sql.Connection;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.greedy.section03.layertests.model.dto.CategoryDTO;
import com.greedy.section03.layertests.model.dto.OrderDTO;
public class OrderDAOTests {
private Connection con;
private OrderDAO orderDAO;
private OrderDTO order;
@Before
public void setup() {
con = getConnection();
orderDAO = new OrderDAO();
order = new OrderDTO();
order.setDate("22/02/07");
order.setTime("12:44:55");
order.setTotalOrderprice(30000);
}
@Test
public void testSelectAllCategory() {
List<CategoryDTO> categoryList = orderDAO.selectAllCategory(con);
assertNotNull(categoryList);
}
@Test
public void testInsertOrder() {
int result = orderDAO.insertOrder(con, order);
assertEquals(1, result);
}
}
✅ jUnit 라이브러리를 활용하여 단위 테스트를 진행할 수 있다.
✅ 매퍼 설정 파일의 구조에 대해 이해할 수 있다.
✅ 테스트 시나리오의 의미를 파악할 수 있다.
✅ @Before의 의미를 이해할 수 있다.
✅ @After의 의미를 이해할 수 있다.
✅ @Test의 의미를 이해할 수 있다.
✅ @Ignore의 의미를 이해할 수 있다.
✅ jUnit에서 제공하는 어노테이션으로 MVC 계층간 테스트를 진행할 수 있다.
'Database' 카테고리의 다른 글
[DB 모델링] 1차 정규화 실습 | 데이터 논리 모델링 (0) | 2022.03.02 |
---|---|
[DB 모델링] 엔티티 도출 실습 | 개념적 모델링 (0) | 2022.03.01 |
[JDBC] Controller | MVC 패턴 | CRUD | ResultView (0) | 2022.02.07 |
[Oracle/수업 과제 practice] 도서 관리 (0) | 2022.02.06 |
[JDBC] VIEW | MVC 패턴 | CRUD (0) | 2022.02.05 |