Java 프레임워크 만들기 - JSP

자바 JUnit 설정 및 테스트 - Java Maven JUnit, 이클립스(Eclipse)

carrotweb 2021. 7. 6. 00:50
728x90
반응형

JUnit은 자바 프로젝트에서 생성되는 클래스의 메서드를 기능 테스트하는 단위 테스트 도구입니다. 이름 그래로 "Java Unit Test"입니다.

JUnit를 설정하는 방법은 Maven를 통한 설정과 이클립스 Library를 추가로 설정하는 두 가지 방식이 있습니다.

Maven 방식과 이클립스 Library 추가 방식은 뭐가 다를까요? 바로 환경 설정에 차이가 있습니다. (기능은 동일합니다.)

Maven 방식은 프로젝트에 포함되는 파일인 "pom.xml"에 적용되어 형상관리 툴(Svn, Git)로 관리되는 프로젝트에서는 동일한 개발 환경으로 개발이 됩니다.

그러나 이클립스 Library 추가 방식은 개발자가 각자의 이클립스에 설정하는 것이 때문에 형상관리 툴로 관리되는 프로젝트에서는 설정을 하지 않으면 오류가 발생합니다.

간단하게 JUnit 3과 JUnit 4의 차이점은 다음과 같습니다.

JUnit 3은 "TestCase"란 클래스를 상속받아 클래스를 생성해야 하고 테스트 메서드 명은 반드시 "test"으로 시작해야 합니다. 그리고 "TestRunner.run()"를 통해서만 테스트할 수 있습니다.

JUnit 4는 "TestCase"란 클래스를 상속받지 않고 테스트 메서드에 @Test라는 Annotation(어노테이션)를 사용하여 적용합니다.

그럼 JUnit를 설정하고 테스트해보겠습니다.

 

 

Maven 설정

1. "https://mvnrepository.com"를 접속하고 검색에 "JUnit"를 입력하고 검색합니다.

 

"JUnit"를 클릭합니다.

"JUnit Jupiter API", "JUnit Jupiter Engine", "JUnit Jupiter (Aggregator)", "JUnit Jupiter Params", "JUnit Vintage Engine", "JUnit Platform Launcher"은 JUnit 5버전이고 "JUnit"은 JUnit 4이하 버전입니다.

여기서는 JUnit 4를 기준으로 하겠습니다. 다음에 JUnit 5를 학습한 후 설명하도록 하겠습니다.

"Version"중에서 최신 버전인 "4.13.2"를 클릭합니다.

 

"Maven"탭에 있는 스크립트를 복사합니다.

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

 

2. "test2" 프로젝트의 "pom.xml"을 오픈하여 복사한 스크립트를 붙여 넣기 하고 저장합니다. 그러면 Maven에서 "junit-4.13.2.jar", "hamcrest-core-1.3.jar"파일들을 자동으로 다운로드합니다.

 

다운로드가 완료되면 자동으로 빌드하고 "test2" 프로젝트의 [Java Resources > Libraries > Maven Dependencies]에 "junit-4.13.2.jar", "hamcrest-core-1.3.jar"파일이 연결되어 있는 것을 확인할 수 있습니다.

 

"test2" 프로젝트의 [Java Resources > Libraries > Maven Dependencies]를 자세히 보면 "junit-4.13.2.jar", "hamcrest-core-1.3.jar"파일에 있는 아이콘이 흐리게 보이는 것을 볼 수 있습니다. 그렇지만 문제는 없습니다. 그 이유는 추가한 Maven 스크립트를 보면 "<scope>"가 "test"로 되어 있기 때문입니다. 개발 후 서버에 반영될 때는 "JUnit"은 배포에서는 제외됩니다.

상기시키는 차원에서 설명드립니다.

"scope"는 "compile, runtime, provided, test" 중 하나를 사용합니다. "scope"가 없다면 기본값으로 "compile"로 됩니다.

- compile는 컴파일에서 사용됩니다.

- runtime는 런타임에서 사용함으로 컴파일에서는 필요하지 않습니다.

- provided는 컴파일에서 사용하나 런타임에는 WAS 컨테이너에서 제공되는 것을 사용함으로 배포에서는 제외됩니다.

- test는 테스트를 실행할 때 컴파일에서 사용함으로 배포에서는 제외됩니다.

 

Library 추가 설정

1. "test2" 프로젝트에서 마우스 오른쪽 버튼을 클릭하여 콘텍스트 메뉴에서 [Properties]를 클릭하거나 이클립스 메뉴에서 [Project > Properties]를 클릭합니다.

 

"Properties"창에서 "Java Build Path"를 클릭하고 "Libraries"탭을 클릭한 후, "Add Libray..."버튼을 클릭합니다.

 

"Add Libray"창에서 "JUnit"를 선택하고 "Next"버튼을 클릭합니다.

 

"JUnit Library"창에서 "JUnit library version"을 "JUnit 4"로 선택하고 "Finish"버튼을 클릭합니다.

 

"Libraries"에 "JUnit"이 추가됩니다. "Apply and Close"버튼을 클릭합니다.

 

"test2" 프로젝트의 [Java Resources > Libraries]에 "JUnit 4"가 등록되고 이클립스 플러그인 폴더(C:\workspaces\eclipse\plugins)에 있는 "org.junit_4.13.0.v20200204-1500.jar", "org.hamcrest.core_1.3.0.v20180420-1519.jar"파일이 연결되어 있는 것을 확인할 수 있습니다.

 

반응형

 

JUnit 4가 설정되었으니 간단한 테스트 유닛을 만들고 테스트하겠습니다.

1. "test2" 프로젝트의 [Java Resources > src/test/java]에서 마우스 오른쪽 버튼을 클릭하여 콘텍스트 메뉴에서 [New > Other...]를 클릭합니다.

 

2. "Select a wizard"창에서 "Wizards"에 "JUnit"을 입력하고 "JUnit Test Case"를 선택한 후 "Next >"버튼을 클릭합니다.

 

"JUnit Test Case"창에서 기본적으로 "New JUnit 4 test"가 선택됩니다. "Name"에 "SimpleTest"으로 입력하고 기능 테스트를 위해 모든 메서드를 선택합니다. 여기서는 간단하게 테스트를 하는 것이기 때문에 테스트할 대상 클래스를 지정하지 않았습니다. "Finish"버튼을 클릭합니다.

 

지원되는 메스드는 다음과 같습니다.

"setUpBeforeClass()"는 전체 테스트 케이스가 시작되기 전에 한 번만 실행됩니다. "@BeforeClass" Annotation(어노테이션)를 사용합니다.

"setUp"는 테스트 케이스가 시작할 때마다 시작 전에 실행됩니다. "@Before" Annotation(어노테이션)를 사용합니다.

"tearDown()"는 테스트 케이스가 끝날 때마다 끝난 후 실행됩니다. "@After" Annotation(어노테이션)를 사용합니다.

"tearDownAfterClass()"는 전체 테스트 케이스가 끝난 후 한 번만 실행됩니다. "@AfterClass" Annotation(어노테이션)를 사용합니다.

테스트 실행 순서는 다음과 같습니다.

@BeforeClass -> @Before -> (@Test, ...) -> @After -> @AfterClass

"@Test"는 여러 개 올 수 있습니다.

"Class under test"는 테스트할 클래스를 지정합니다.

"test2" 프로젝트의 [Java Resources > src/test/java]에 "test2 > SimpleTest.java"가 생성됩니다.

package test2;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class SimpleTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void test() {
		fail("Not yet implemented");
	}

}

 

만약 "New JUnit 3 test"를 선택하였다면 "Superclass"가 "junit.framework.TestCase"으로 위에서 설명드린 것처럼 상속받아야 합니다. 그리고 "setUpBeforeClass()"과 "tearDownAfterClass()"는 지원하지 않습니다. 그러나 "constructor"는 지원합니다.

 

3. 테스트 실행 순서를 확인하기 위해 출력문을 추가합니다.

/**
 * 전체 테스트 케이스가 시작되기 전에 한번만 실행됩니다.
 * @throws java.lang.Exception
 */
@BeforeClass
public static void setUpBeforeClass() throws Exception {
	System.out.println("setUpBeforeClass 실행");
}

/**
 * 전체 테스트 케이스가 끝난 후 한번만 실행됩니다.
 * @throws java.lang.Exception
 */
@AfterClass
public static void tearDownAfterClass() throws Exception {
	System.out.println("tearDownAfterClass 실행");
}

/**
 * 테스트 케이스가 시작할 때마다 시작전에 실행됩니다.
 * @throws java.lang.Exception
 */
@Before
public void setUp() throws Exception {
	System.out.println("setUp 실행");
}

/**
 * 테스트 케이스가 끝날때 마다 끝난 후 실행됩니다.
 * @throws java.lang.Exception
 */
@After
public void tearDown() throws Exception {
	System.out.println("tearDown 실행");
}

/**
 * 테스트 케이스를 실행합니다.
 */
@Test
public void test() {
	System.out.println("test 실행");
	fail("Not yet implemented");
}

 

4. "test2" 프로젝트의 [Java Resources > src/test/java]에 있는 "test2 > SimpleTest.java"에서 마우스 오른쪽 버튼을 클릭하여 콘텍스트 메뉴에서 [Run As > JUnit Test]를 클릭합니다.

 

"SimpleTest"가 실행되면서 왼쪽에 "JUnit"이란 탭이 추가됩니다. 그런데 "Failures"이 "1"이 나오고 실패에 대한 위치가 하단에 나옵니다. 그 이유는 테스트 케이스에서 실패(fale) 매소드가 실행되었기 때문입니다.

"Failure Trace"를 확인해보면 실패 메시지("Not yet implemented")와 실패 위치가 나타납니다.

"Console"탭을 보면 위에서 설명한 것과 같이 테스트 실행 순서를 확인할 수 있습니다.

[Console]

setUpBeforeClass 실행
setUp 실행
test 실행
tearDown 실행
tearDownAfterClass 실행

 

5. 테스트가 성공적으로 나오게 테스트 케이스를 수정합니다.

/**
 * 테스트 케이스를 실행합니다.
 */
@Test
public void test() {
	System.out.println("test 실행");
	//fail("Not yet implemented");
	String test = "SimpleTest";
	assertEquals("SimpleTest", test);
}

 

6. 다시 테스트를 실행하기 위해 "JUnit"탭에 있는 툴바에서 "Rerun Test"버튼을 클릭합니다.

 

"SimpleTest"가 다시 실행되면서 "Failures"이 "0"이 나오고 성공합니다. 테스트 실패가 없을 경우 적색바에서 녹색바로 변경됩니다.

 

지금까지 JUnit를 설정하고 간단한 테스트를 통해 JUnit를 테스트해보았습니다.

이어서 JUnit의 fail(), assert(), assume() 메서드들을 알아보겠습니다.

728x90
반응형