그동안 JUnit 테스트를 이용하면서, 가장 힘들었던 부분 중에 하나는 테스트 데이터를 하드코딩해야 하고, 여러 값을 세팅하기 어렵다는 것이었다.
RAD 6.X에서는 컴포넌트 테스트라는 기능을 제공하여, 이 부분을 커버해 주고 있었는데, 7.0으로 넘어오면서 TPTP기반의 테스트로 바뀌면서
그 기능이 도움말에서 아주 찾기 어려웠으며, 사용하기 어려웠는데,
7.5에서 다시 찾아보니, 다시 그럭저럭 쓸만하게 바뀌었다. 아마도 Ganemede의 힘이 아닐까 싶다. (한편으로는 좀 아쉽긴 하지만)
RSA 도움말의 내용이지만, 꼭 따라해 볼 만 할 것 같아서, 캡처해 봤다.
JUnit 테스트에서 데이터풀 액세스
목표:
Eclipse TPTP(Test and Performance Tools Platform)를 사용하여 예제 테스트 애플리케이션에서 데이터풀을 작성하고 액세스합니다.
필요한 시간
1시간
시작하기 전에
이 학습을 시작하기 전에 다음을 수행해야 합니다.
- Eclipse와 Eclipse TPTP(Test and Performance Tools Platform)를 설치하십시오.
- JUnit 테스트에 대한 기본 정보를 습득하십시오. JUnit 테스트에 대한 자세한 정보는 www.junit.org를 참조하십시오.
- 현재 TPTP 버전에 맞는 Agent Controller를 구성하고 실행하십시오. 자세한 정보는 Agent Controller 시작하기를 참조하십시오.
설명
이 학습에서는 MyShoppingCart 애플리케이션을 작성하고 테스트합니다. Eclipse TPTP(Test and Performance Tools Platform)를 사용하면 JUnit 테스트를 개발하고, 테스트 환경에 데이터를 제공하는 데이터풀을 작성할 수 있습니다.
이 학습에서는 다음 프로시저를 안내합니다.
샘플 사용자 애플리케이션 작성
이 프로시저에서는 MyShoppingCart 클래스를 개발하고 다음 프로시저에서는 Eclipse TPTP(Test and Performance Tools Platform)를 사용하여 해당 테스트 환경을 개발합니다.
- 새 Eclipse 자바 프로젝트를 작성하십시오.
- 파일 메뉴에서 파일 > 새로 작성 > 프로젝트...를 선택하십시오. 새 프로젝트 대화 상자가 나타납니다.
- 마법사 목록에서 자바 프로젝트를 선택하고 다음을 클릭하십시오. 자바 프로젝트 작성 페이지가 나타납니다.
- 프로젝트 이름에 datapoolExample을 입력하고 완료를 클릭하십시오. 네비게이터 보기에 datapoolExample 프로젝트가 나타납니다.
- MyShoppingCart 클래스를 작성하십시오.
- 네비게이터 보기에서 datapoolExample 프로젝트를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 클래스를 선택하십시오. 새 자바 클래스 대화 상자가 나타납니다.
- 이름 필드에 MyShoppingCart를 입력하십시오.
- Main 메소드 public static void main(String[] args)를 작성하는 옵션을 지우십시오.
- 완료를 클릭하십시오. 자바 편집기에 MyShoppingCart.java 파일이 나타납니다.
- MyShoppingCart 소스에 다음을 입력하십시오.
import java.util.Hashtable; public class MyShoppingCart { public Hashtable myFlowers; public MyShoppingCart() { myFlowers = new Hashtable(); myFlowers.put("Orchid", new Double(5.99)); myFlowers.put("Tulip", new Double(1.99)); myFlowers.put("Yellow Carnation", new Double(6.99)); myFlowers.put("White Rose", new Double(9.99)); myFlowers.put("Geraniums", new Double(4.99)); } public double itemCost(String itemName, int itemQuantity) { Double price = (Double)myFlowers.get(itemName); if (price != null) { return price.doubleValue()*itemQuantity; } return -1; } } - MyShoppingCart.java를 저장하십시오. 파일 메뉴에서 파일 > 저장을 선택하십시오.
TPTP 테스트 스위트 설정
이 프로시저에서는 MyShoppingCart 클래스의 테스트 스위트를 개발합니다. Eclipse TPTP(Test and Performance Tools Platform)를 사용하여 itemCost 메소드의 JUnit 테스트를 개발합니다.
- 테스트 Perspective를 여십시오.
- 파일 메뉴에서 창 > Perspective 열기 > 기타를 선택하십시오.
- 테스트를 선택하고 확인을 클릭하십시오. 테스트 네비게이터가 나타납니다.
- 새 TPTP JUnit 테스트를 작성하십시오.
- 테스트 네비게이터에서 datapoolExample 프로젝트를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 요소 테스트...를 선택하십시오.
- 요소 테스트 대화 상자에서 TPTP JUnit 테스트를 선택하고 다음을 클릭하십시오. 새 테스트 케이스 대화 상자가 나타나며 JUnit 라이브러리를 추가하도록 프롬프트합니다. JUnit 라이브러리를 추가하려면 예를 클릭하십시오.
- 새 JUnit 테스트 소스 코드 페이지의 이름 필드에 MyShoppingCartTest를 입력하십시오. 테스트 동작 편집 방법 선택 섹션에서 테스트 편집기에서 편집 옵션(기본값)을 선택하십시오.
- 완료를 클릭하십시오. TPTP JUnit 테스트 편집기가 나타나며 MyShoppingCartTest 테스트 스위트가 표시됩니다. 개요 탭에는 테스트 설명, 소스 정보 및 테스트 메소드 목록이 포함됩니다. 현재 정의된 테스트 메소드가 없습니다. 이 학습의 경우, TPTP JUnit 테스트 편집기는 메소드 스텁을 생성하므로 소스 정보 섹션의 테스트 동작을 코드로 구현 옵션은 지워져야 합니다. 자세한 정보는 JUnit 테스트 스위트 편집기를 참조하십시오.
- testItemCost 및 testMyShoppingCartConstructor 메소드를 추가하십시오.
- 테스트 메소드 탭에서 추가를 클릭하십시오. 테스트의 기본 이름이 나타납니다.
- testItemCost 메소드를 추가하십시오. 이름 필드에 새 테스트 이름의 testItemCost를 입력하십시오. 설명 필드에 Test for the MyShoppingCart.itemCost(String, int) method를 입력하십시오.
- testMyShoppingCartConstructor 메소드를 추가하십시오. 테스트 메소드 탭에서 추가를 클릭하십시오. 이름 필드에 새 테스트 이름의 testMyShoppingCartConstructor를 입력하십시오. 설명 필드에 Test for the MyShoppingCart constructor를 입력하십시오.
- 테스트 실행 동작을 구성하십시오.
- 테스트 실행 루프를 추가하십시오. 동작 탭에서 추가.. > 루프를 클릭하십시오. 이름 필드에 Loop_MyShoppingCart를 입력하십시오. 반복 횟수 필드에 1(기본값)을 입력하십시오.
- testMyShoppingCartConstructor 호출을 추가하십시오. Loop_MyShoppingCart를 선택하고 추가... > 호출을 클릭하십시오. 테스트 호출 대화 상자가 나타납니다. testMyShoppingCartConstructor를 선택하고 확인을 클릭하십시오.
- testItemCost 호출을 추가하십시오. Loop_MyShoppingCart를 선택하고 추가... > 호출을 클릭하십시오. 테스트 호출 대화 상자가 나타납니다. testItemCost를 선택하고 확인을 클릭하십시오.
- 테스트 스위트를 저장하십시오. 파일 메뉴에서 파일 > 저장을 선택하십시오.

참고: 저장 명령을 실행하면 TPTP JUnit 테스트 편집기가 MyShoppingCartTest.java에 테스트 메소드 스텁을 작성합니다.
- 생성된 JUnit 테스트 메소드 testMyShoppingCartConstructor 및 testItemCost의 코드를 입력하십시오.
- 자바 Perspective를 여십시오. 파일 메뉴에서 창 > Perspective 열기 > 기타... > 자바를 선택하십시오.
- MyShoppingCartTest.java를 여십시오. 네비게이터에서 datapoolExample 프로젝트 폴더를 열고 MyShoppingCartTest.java를 두 번 클릭하십시오. 테스트 스위트를 설정하고 실행하는 코드와 testMyShoppingCartConstructor 및 testItemCost의 스텁 메소드와 함께 MyShoppingCartTest.java 컨텐츠가 자바 편집기에 나타납니다.
- testMyShoppingCartConstructor 메소드에 대한 다음 코드를 입력하십시오.
public void testMyShoppingCartConstructor() throws Exception { MyShoppingCart cart = new MyShoppingCart(); Double priceOrchid = (Double)cart.myFlowers.get("Orchid"); Double priceTulip = (Double)cart.myFlowers.get("Tulip"); assertTrue(priceOrchid.doubleValue() == 5.99); assertTrue(priceTulip.doubleValue() == 1.99); } - testItemCost 메소드에 대한 다음 코드를 입력하십시오.
public void testItemCost() throws Exception { MyShoppingCart cart = new MyShoppingCart(); double priceForTwo = cart.itemCost("Orchid", 2); assertTrue(priceForTwo == 11.98); } - MyShoppingCartTest.java를 저장하십시오. 파일 메뉴에서 파일 > 저장을 선택하십시오.
- 테스트 Perspective를 열고 테스트 배치를 작성하십시오. 예를 들어, 테스트 배치 작성을 참조하십시오.
- 사용자 정의 배치를 사용하여 테스트를 실행하십시오.
- 테스트 네비게이터에서 MyShoppingCartTest 테스트 스위트를 마우스 오른쪽 단추로 클릭하고 실행 도구 > 실행...을 선택하십시오. 실행 구성 대화 상자가 나타납니다.
- 구성 분할창에서 테스트를 선택한 후 새로 작성을 클릭하십시오.
- 실행 구성의 왼쪽 분할창에서(실행할 테스트 선택) datapoolExample을 펼치고 MyShoppingCartTest 테스트 스위트를 선택하십시오.
- 실행 구성의 오른쪽 분할창에서 섹션을 작성한 배치를 선택하십시오.
- 테스트 로그 탭에서 기본값 사용 옵션을 지우고 위치에 대한 datapoolExample 프로젝트 폴더를 선택하십시오.
- 실행을 클릭하여 테스트를 실행하십시오.
- 테스트 네비게이터에 나타나는 MyShoppingCartTest 테스트 로그를 두 번 클릭하십시오. MyShoppingCartTest 테스트 로그가 나타납니다. 테스트 세부사항을 보려면 이벤트 탭을 선택하십시오. 테스트 스위트 시작, Loop_MyShoppingCart 시작, 테스트 시작, 테스트 판정, 테스트 중지, 두 번째 테스트 시작, 두 번째 테스트 판정, 두 번째 테스트 중지, 루프 중지, 테스트 스위트 판정 및 테스트 스위트 중지와 같은 이벤트가 표시되어야 합니다.

데이터풀 작성 및 테스트 데이터 초기화
이 프로시저에서는 테스트 데이터를 저장할 단순 데이터풀을 작성합니다. 데이터풀 편집기를 사용하여 변수(열), 레코드(행) 및 등가 클래스(관련 레코드 그룹)와 같은 데이터풀의 구조 요소를 정의합니다.
- 테스트 데이터를 포함하여 CSV(쉼표로 분리) 파일을 작성하십시오. 일반적으로 스프레드시트 애플리케이션 또는 데이터베이스의 데이터를 CSV 형식으로 내보낼 수 있습니다. 그러나 이 학습에서는 텍스트 편집기에 데이터를 입력합니다.
- 텍스트 편집기에서 다음을 입력하십시오.
,ModelNumber::String,Description::String,Price::Double flowers,F0001,Orchid,5.99 flowers,F0002,Tulip,1.99 flowers,F0003,Yellow Carnation,6.99 flowers,F0004,White Rose,9.99 flowers,F0005,Geraniums,4.99
- 임시 외부 위치에 파일을 flowerData.csv로 저장하십시오.
- 텍스트 편집기에서 다음을 입력하십시오.
- Eclipse에서 테스트 Perspective를 여십시오.
- 파일 메뉴에서 창 > Perspective 열기 > 기타를 선택하십시오.
- 테스트를 선택하고 확인을 클릭하십시오. 테스트 네비게이터가 나타납니다.
- 테스트 네비게이터에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 테스트 요소...를 선택하십시오. 새 테스트 요소 대화 상자가 나타납니다.
- 마법사 목록 상자에서 테스트 자산 폴더를 펼치고 데이터풀을 선택하십시오.
- 다음을 클릭하십시오. 새 데이터풀 대화 상자가 나타납니다.
- 데이터풀 프로젝트 폴더 및 데이터풀 이름을 선택하십시오. 기존 프로젝트 목록에서 datapoolExample 프로젝트를 선택하십시오. 이름 필드에 shoppingCartDatapool을 입력하십시오. 계속하려면 다음을 클릭하고 CSV(쉼표로 분리) 파일 가져오기 페이지를 열려면 다음을 다시 클릭하십시오.
- CSV 파일 flowerData.csv를 가져오십시오.
- CSV 파일 필드에서 찾아보기를 클릭하여 flowerData.csv를 탐색하십시오.
- 첫 번째 행에 변수 이름 및 제안 유형 포함 옵션을 선택하십시오. flowerData.csv의 첫 번째 행에는 열 표제와 유형이 포함됩니다.
- 첫 번째 열에 등가 클래스 이름 포함 옵션을 선택하십시오. 등가 클래스는 관련 데이터의 그룹입니다. flowerData.csv의 첫 번째 열은 flowers라는 단일 등가 클래스를 지정합니다.
- 완료를 클릭하십시오. 초기 데이터풀 크기를 지정한 경우, 대화 상자가 나타납니다. 이 크기는 CSV 파일 크기와 충돌할 수 있습니다. CSV 파일의 크기를 사용하려면 예를 클릭하십시오. 지정된 초기 크기를 사용하려면(CSV 파일 데이터를 자를 수 있음) 아니오를 클릭하십시오.flowers 등가 클래스에 포함된 데이터를 표시하는 데이터풀 편집기가 나타납니다.

데이터풀 작성에 대한 자세한 정보는 데이터풀 작성을 참조하십시오.
데이터풀을 참조할 테스트 케이스 수정
이 프로시저에서는 데이터풀 API를 사용하여 하드코딩된 테스트 값을 데이터풀 열에 대한 참조로 바꿉니다.
데이터풀 API에서 필요한 라이브러리 추가
데이터풀 API에는 다양한 TPTP 및 EMF(Eclipse Modeling Framework) 라이브러리가 필요합니다. 이 프로시저에서는 이러한 라이브러리를 자바 빌드 경로에 추가합니다.- 자바 Perspective를 여십시오. 파일 메뉴에서 창 > Perspective 열기 > 자바를 선택하십시오.
- datapoolExample 프로젝트 특성을 여십시오. 네비게이터 또는 패키지 탐색기 창에서 datapoolExample 프로젝트 폴더를 마우스 오른쪽 단추로 클릭하고 특성을 선택하십시오. datapoolExample 특성 대화 상자가 나타납니다.
- tptp-models.jar를 자바 빌드 경로에 추가하십시오.
- 왼쪽 분할창에서 자바 빌드 경로를 선택하십시오.
- 오른쪽 분할창에서 라이브러리 탭을 선택하고 변수 추가...를 클릭하십시오. 새 변수 클래스 경로 입력 대화 상자가 나타납니다.
- ECLIPSE_HOME 변수를 선택하고 확장...을 클릭하십시오. 변수 확장 대화 상자가 나타납니다. plugins > org.eclipse.tptp.platform.models_Version 폴더를 열고 tptp-models.jar을 선택하십시오. 여기서, Version은 TPTP 버전 번호입니다.
- 확인을 클릭하여 라이브러리를 추가하십시오.
- org.eclipse.emf.common_Version.jar를 자바 빌드 경로에 추가하십시오. 여기서, Version은 EMF 버전입니다.
- 새 변수 클래스 경로 입력 대화 상자에서 ECLIPSE_HOME 변수를 선택하고 확장...을 클릭하십시오.
- 플러그인 폴더를 열고 org.eclipse.emf.common_Version.jar를 선택하십시오. 여기서 Version은 EMF 버전입니다.
- 확인을 클릭하여 라이브러리를 추가하십시오.
- org.eclipse.emf.ecore_Version.jar를 자바 빌드 경로에 추가하십시오. 여기서, Version은 EMF 버전입니다.
- 새 변수 클래스 경로 입력 대화 상자에서 ECLIPSE_HOME 변수를 선택하고 확장...을 클릭하십시오.
- 플러그인 폴더를 열고 org.eclipse.emf.ecore_Version.jar를 선택하십시오. 여기서 Version은 EMF 버전입니다.
- 확인을 클릭하여 라이브러리를 추가하십시오.
- org.eclipse.core.runtime_Version.jar를 자바 빌드 경로에 추가하십시오. 여기서, Version은 Eclipse 플랫폼 버전입니다.
- 새 변수 클래스 경로 입력 대화 상자에서 ECLIPSE_HOME 변수를 선택하고 확장...을 클릭하십시오.
- 플러그인 폴더를 열고 org.eclipse.core.runtime_Version.jar를 선택하십시오. 여기서 Version은 Eclipse 플랫폼 버전입니다.
- 확인을 클릭하여 라이브러리를 추가하십시오.
- 확인을 클릭하여 특성 대화 상자를 닫으십시오.
데이터풀 API 사용
이 프로시저에서는 shoppingCartDatapool을 활용하도록 MyShoppingCartTest 클래스 및 testMyShoppingCartConstructor 메소드를 수정합니다.- 필요한 경우 자바 Perspective를 여십시오. 파일 메뉴에서 창 > Perspective 열기 > 자바를 선택하십시오.
- MyShoppingCartTest.java를 여십시오. 네비게이터에서 datapoolExample 프로젝트 폴더를 열고 MyShoppingCartTest.java를 두 번 클릭하십시오. MyShoppingCartTest.java 컨텐츠가 자바 편집기에 나타납니다.
- MyShoppingCartTest 클래스에 다음 import 문을 추가하십시오.
import org.eclipse.hyades.execution.runtime.datapool.IDatapool; import org.eclipse.hyades.execution.runtime.datapool.IDatapoolFactory; import org.eclipse.hyades.execution.runtime.datapool.IDatapoolIterator; import org.eclipse.hyades.models.common.datapool.impl.Common_DatapoolFactoryImpl;
- IDatapoolIterator 클래스 인스턴스를 선언하십시오. 이 클래스 인스턴스는 설정 코드에서 초기화되어 테스트 메소드에서 사용됩니다.
public class MyShoppingCartTest extends HyadesTestCase { IDatapoolIterator dpIterator; //... - setUp 메소드를 수정하여 데이터풀을 초기화하십시오. TPTP JUnit 테스트 환경의 경우 setUp 메소드는 공통 고정 기능을 제공합니다. setUp 메소드를 사용하면 공통 테스트 변수를 초기화할 수 있습니다. 참고: java.io.File 생성자의 <workspace>에 완전한 작업공간 경로를 지정하십시오.
protected void setUp() throws Exception { // Initialize the datapool factory IDatapoolFactory dpFactory = new Common_DatapoolFactoryImpl(); // Load the shoppingCartDatapool datapool IDatapool datapool = dpFactory.load( new java.io.File("<workspace>\\datapoolExample\\shoppingCartDatapool.datapool"), false); // Create an iterator to traverse the datapool dpIterator = dpFactory.open(datapool,"org.eclipse.hyades.datapool.iterator.DatapoolIteratorSequentialPrivate"); // Initialize the datapool to traverse the first equivalence class. dpIterator.dpInitialize(datapool,0); }참고:- IDatapoolFactory 로드 메소드의 두 번째 매개변수는 데이터풀 인스턴스를 공유하는지 여부를 나타냅니다. true인 경우 데이터풀 캐시에서 데이터풀의 기존 사본을 확인합니다. false인 경우 데이터풀은 개인용 인스턴스입니다. 공유 데이터풀 인스턴스를 수정하면 다른 사용자에게 영향을 줄 수 있으므로 제한된 환경에만 권장됩니다.
- 데이터풀을 프로그램적으로 편집하려면 org.eclipse.hyades.edit.datapool을 가져오십시오.
- IDatapoolFactory open 메소드의 두 번째 매개변수는 반복기 유형을 나타냅니다. 공유 데이터풀에는 DatapoolIteratorSequentialPrivate를 사용하십시오.
- testMyShoppingCartConstructor 메소드를 수정하여 shoppingCartDatapool을 활용하십시오.
public void testMyShoppingCartConstructor() throws Exception { MyShoppingCart cart = new MyShoppingCart(); // Traverse through datapool... // Test if constructor initializes each flower record appropriately while(!dpIterator.dpDone()) { String Description = dpIterator.dpCurrent().getCell("Description").getStringValue(); double datapoolPrice = dpIterator.dpCurrent().getCell("Price").getDoubleValue(); // Test if the flower is accounted for in the application Double applicationPrice; assertNotNull(applicationPrice = (Double)cart.myFlowers.get(Description)); // Test that the application price equals the price in the datapool assertTrue(applicationPrice.doubleValue() == datapoolPrice); dpIterator.dpNext(); } } - MyShoppingCartTest.java를 저장하십시오. 파일 메뉴에서 파일 > 저장을 선택하십시오.
- testArtifact에 데이터풀을 추가하십시오.
- 테스트 Perspective를 여십시오. 테스트 네비게이터에서 testDeployment를 두 번 클릭하여 편집기에서 여십시오.
- 쌍 탭에서 testAsset을 선택하고 열기...를 클릭하십시오.
- 테스트 자산 탭에서 추가...를 클릭하십시오. 데이터풀을 선택하고 확인을 클릭하십시오. 자산을 저장하십시오.
- 사용자 정의 배치를 사용하여 테스트를 실행하십시오.
- 테스트 Perspective를 여십시오. 테스트 네비게이터에서 MyShoppingCartTest 테스트 스위트를 마우스 오른쪽 단추로 클릭하고 실행 도구 > 실행...을 선택하십시오. 실행 구성 대화 상자가 나타납니다.
- 실행 구성의 왼쪽 분할창에서 MyShoppingCartTest 테스트 스위트를 선택하십시오.
- 실행 구성의 오른쪽 분할창에서, 시작하기 전에 섹션에서 작성한 배치를 선택하십시오.
- 테스트 로그 탭에서 기본값 사용 옵션을 지우고 위치에 대한 datapoolExample 프로젝트 폴더를 선택하십시오.
- 실행을 클릭하여 테스트를 실행하십시오.
- 선택한 배치에 암호화된 데이터풀이 포함되어 있는 경우 테스트를 실행한 후 배치에 포함되어 있는 암호화된 각 데이터풀의 비밀번호가 필요한 대화 상자가 표시됩니다.
- 테스트 네비게이터에 나타나는 새 MyShoppingCartTest 테스트 로그를 두 번 클릭하십시오. MyShoppingCartTest 테스트 로그가 나타납니다. 테스트 결과 세부사항을 보려면 이벤트 탭을 선택하십시오.
관련 개념
공통 테스트 태스크 및 개념
관련 태스크
테스트 배치 작성
테스트에 변수 데이터 제공
수동으로 JUnit 테스트 작성
이 글은 스프링노트에서 작성되었습니다.
이올린에 북마크하기