본문 바로가기

Archived(Programming)/Spring #2(기초)

JUnit4 & Spring Test

# JUnit

JUnit은 Java에서 독립된 단위테스트(Unit Test)를 지원해주는 프레임워크이다.

JUnit은 보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위 테스트를 쉽게 해주는 테스트 지원 프레임워크

 

CF) 단위테스트(Unit Test) 란?

소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는 지 검증하는 절차, 즉 모든 함수와 메소드에 대한 테스트 케이스를 작성하는 절차를 뜻한다.

 

특징

  • 가장 많이 사용하는 Unit Test
  • 단정(Assert) 메서드로 테스트 케이스의 수행 결과를 판별함(assertEquals(예상 값, 실제 값))
  • Junit4 부터는 테스트를 지원하는 어노테이션을 제공(@Test, @Before, @Atter)
  • 각 @Test 메서드가 호출할 때마다 새로운 인스턴스를 생성하여 독립적인 테스트를 제공함

JUnit 에서 지원하는 어노테이션

1) @Test

@Test가 선언된 메서드는 테스트를 수행하는 메소드가 됨

JUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 하므로 @Test마다 객체 생성

 

2) @Ignore

테스트를 실행하지 않게 함

 

3) @Before

@Test가 실행되기 전에 반드시 실행됨

@Test 메서드에서 공통으로 사용하는 코드를 @Before 메서도에 선언하여 사용하면 됨

Setup을 위해 사용함

 

4) @After

@Test 메서드 실행 후에 실행됨

자원 정리를 위해 사용함

 

5) @BeforeClass

@Test 메서드 보다 먼저 한 번 수행되어야할 경우 사용

 

6) @AfterClass

@Test 메서드 보다 나중에 한 번 수행되어야할 경우 사용

 

 

# 테스트를 지원하는 단정(Assert) 메서드

자주 사용되는 Assert Method

# Spring Test에서 테스트를 지원하는 어노테이션

@RunWith(SpringUnit4ClassRunner.class)

@ContextConfiguration

@AutoWired

 

# 실습 1. JUnit4 테스트

mvnrepository JUnit 4.7 버전

Maven Project로 생성한 경우 이미 Dependency로 포함되어 있음

 

kr.co.acomp.hello.dao.ArticleDAOTest.java 생성 - hello-web/src/test/java 

package kr.co.acomp.hello.dao;

import org.junit.Assert;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import kr.co.acomp.hello.vo.Article;

public class ArticleDAOTest {

	@Test
	public void testSelectArticleById() {
		
		ApplicationContext ctx = 
				new FileSystemXmlApplicationContext(
					"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml");
		ArticleDAO dao = ctx.getBean("articleDAO", ArticleDAO.class);
		
		// Test
		Article article = dao.selectArticleById(null);

		// 값 결과 확인
		Assert.assertTrue(article.getAuthor().contentEquals("lee"));
		
	}
}

JUnit Test 실행

@Before 활용

package kr.co.acomp.hello.dao;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import kr.co.acomp.hello.vo.Article;

public class ArticleDAOTest {

	private ApplicationContext ctx;
	
	@Before
	public void setup() {
		ctx = new FileSystemXmlApplicationContext(
				"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml");
	}
	
	@Test
	public void testSelectArticleById() {
		ArticleDAO dao = ctx.getBean("articleDAO", ArticleDAO.class);
		
		// Test
		Article article = dao.selectArticleById(null);

		// 값 결과 확인
		Assert.assertTrue(article.getAuthor().contentEquals("yoon"));
		
	}
}

# 실습 2. Spring 테스트

 

maven repository 5.1.1

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>

번거로운 작업들을 자동으로 처리해줌

package kr.co.acomp.hello.dao;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import kr.co.acomp.hello.vo.Article;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={
	"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml",
	"file:src/main/webapp/WEB-INF/spring/root-context.xml"}
)
public class ArticleDAOTest {

	@Autowired
	private ArticleDAO dao;
	
	@Test
	public void testSelectArticleById() {
		// Test
		Article article = dao.selectArticleById(null);
		// 값 결과 확인
		Assert.assertTrue(article.getAuthor().contentEquals("yoon"));
	}
}

 

'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글

Context 분리와 전략  (0) 2020.03.13
Spring Data Access 기술과 DataSource  (0) 2020.03.13
Static file 처리와 FileUpload  (0) 2020.03.12
Restful API  (0) 2020.03.12
Http 파라미터 처리  (0) 2020.03.12