본문 바로가기
Programming/SpringFramework

[Spring] JUnit 단위 테스트

by prinha 2020. 8. 6.
반응형

1-1. JUnit

Java에서 독립된 단위 테스트를 지원해주는 산업 표준 프레임워크

 

1-2. Spring-Test

@RunWith/@ContextConfiguration 등의 어노테이션을 활용하여

Spring Framework에서 조금 더 편하게 테스트를 지원할 수 있게 해준다.

 

2-1 JUnit 환경 세팅

Eclipse + springMVC + maven 개발환경 기반

 

2-2. JUnit 라이브러리 추가

Maven 프로젝트를 사용하면 의존관계 설정이 쉽게 되어 기존 프로젝트에서처럼

개발자가 해당 라이브러리를 찾는 수고를 덜어준다.

pom.xml -> dependencies element 안에 JUnit dependency 코드를 추가

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.7</version>
  <scope>test</scope>
</dependency> 

 

3. JUnit Spring-test를 사용하는 이유?

controll, service, DAO 단을 연결하고 웹서버(톰캣구동) 또는 main() 함수에서 테스트를 진행할 때

에러가 난다면 어디서부터 잘못되었는지 확인해야할 부분이 많다.

 1) 화면단(View-JSP)에서 값이 잘못 전송되어 온 경우

 2) 서비스단 로직에 문제가 발생한 경우

 3) 여러명이 협업을 하여 합치는 경우, 서로 만든 서비스 로직에 문제가 있는 경우 등등

 

4. JUnit Annotation 사용 예시

 1) 스프링 프레임워크 기반의 JUnit 테스트를 위한 세팅

// Spring으로 실행되는 클래스 파일임을 의미함
@RunWith(SpringJUnit4ClassRunner.class)

// 구문을 분석해서 해당 패키지의 클래스를 Bean으로 생성, 스프링 컨테이너에 등록, DI(의존성 주입)로 사용
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")

 

 2) JUnit4 어노테이션

@Test : 테스트 메소드 지정
@Test(timeout=5000) : 메소드 수행시간 제한하기
@Test(expected=RuntimeException.class) : Exception 테스트

@Test(timeout=5000) : 테스트 하지않기, 건너뛰기
@Ignore(value=”여기는 테스트 안할거야”) : 테스트 하지않기, 건너뛰기

@BeforeClass : 테스트 클래스 내에서 수행 전 한 번만 실행, static method 여야 함
@AfterClass : 테스트 클래스 내에서 수행 후 한 번만 실행, static method 여야 함
@Before : 테스트 케이스 수행 전 반복실행
@After : 테스트 케이스 수행 후 반복실행

 

5. JUnit assert 주요 메소드 및 사용예시

import static org.junit.Assert.*; 으로 static import 하여 쉽게 사용할 수 있음

assertEquals([message], expected, actual) 두 값이 같은 지 비교
assertSame([message], expceted, actual)
assertNotSame([message], expceted, actual)
두 객체가 동일한 객체인지 비교
assertTrue([message], expceted)
assertFalse([message], expceted)
참/거짓 판별
assertNull([message], expceted)
assertNotNull([message], expceted)
null여부 판단
fail([message]) 테스트 실패로 판단

 

위 메서드 외에도 많은 메서드와 오버로드된 메서드를 제공한다.
자세한 내용은 http://junit.sourceforge.net/javadoc/org/junit/Assert.html 해당 링크를 참고

String names[] = {"y2kpooh","hwang"};
String names2[] = {"y2kpooh","hwang"};
assertArrayEquals(names2, names);

List someList = someClass.getSomeList();
assertNotNull("조회결과 null", someList);
assertTrue(someList.size() > 0); 
assertEquals(3, someList.size()); 

 

 

출처 및 참고 : https://epthffh.tistory.com/entry/Junit%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8B%A8%EC%9C%84%ED%85%8C%EC%8A%A4%ED%8A%B8

 

 

 

반응형