구성 설명
1. 이론 수업
2. 테스트 케이스 모델 2개 (4칙연산, int 값에 -+ 하는 계산 로직 일명 통장)
3. 각각 테스트 구현방법(Junit3, Junit4) 4는 두가지 다 3은 1가지만 예제 올림
4. 버전별로 테스트를 묶어서 구현하는 방법
순서로 진행됩니다.
....단위 테스트 프레임워크 (Junit)
1997년 Erich Gamma , Kent Beck 둘이서 개발함
컨퍼런스를 가는중에 Smalltalk 라는 프로그램 테스트를 위한 SUnit 을 가지고
자바 기반인 JUnit 로 컨버팅(다른 언어를 자바형태로 컨버팅 함)
공개 소스 소프트웨어, 이후 Java 개발에서 단위 테스트 de facto 표준 프레임워크로 발전함
xUnit : 모든 언어를 위한 프레임워크
JUnit 의 기능
결과를 판별해주는 단정문(boolean)
여러 테스트에서 공통으로 사용할수 있는 테스트 픽스처
테스트 러너(작업도구)
Junit 4 (Java1.5ver)과 같이 발전함 1.5 버전 기준으로 하위는 3를 사용, 위에는 4버전을 사용
★Junit3 작성 규칙(4는 해당사항 없음)
-TestCase를 상속받아야 쓸수 있음
-테스트 메소드 이름은 반드시 Test로 시작해야 함
setUp(); //테스트 시작전
tearDown(); //테스트 종료 전
--> 테스트 픽스처 메소드
테스트 스위트 (한방에 테스트 돌리고 싶을때 사용)
Method 명은 반드시 public static Test suite() 여야 가능함
테스트 추가시 suite.addTestSuite(테스트 클래스.class) 형태를 가져야 함
★Junit4 -- test 안붙여도 실행됨
또한 유연한 픽스처 제공 및 예외 테스트 가능Test(expected=class name), 테스트 무시 가능
(@Ignore("message")
배열 지원, 시간제한 테스트 가능(@Test(timeout=1000)
시작할때 @RunWith(class name) 으로 시작
여러개 묶어 할때 @SuiteClasses(Class[]) 로 가능
------------------------Unitest ver 3 활용 예제--------------------------------------
기본 클래스 Calculator ---------------------------------------------------------------
//4칙 연산을 기본적으로 하는 메소드 4개가 결합된 클래스 하나를 만든 상태임
public class Calculator {
public static int add(int num1, int num2){
return num1+num2;
}
public static int subtract(int num1, int num2){
return num1-num2;
}
public static int numtiply(int num1, int num2){
return num1*num2;
}
public static int divide(int num1, int num2){
return num1/num2;
}
}
------------------------------------------------------------------------------------
JUnit ver3 으로 테스트 한 예제 Calculator3Test ---------------------------------------
public class Calculator3Test extends TestCase {
@Override
protected void tearDown() throws Exception {
System.out.println("setUp");
//테스트를 타면서 값이 변할수 있는데 teatDawn 메소드를 넣으면
// 1개 메소드 실행후 초기화된다.
// 한개 메소드 실행하고 tearDown 실행하고 다른 메소드 실행하고
// tearDown 실행하고 ........
}
public void testAdd() {
// 밑에 세가지 순서를 지켜서 작성하는게 좋다고 권고함
// setup
int num1 = 3;
int num2 = 2;
// execute
int result = Calculator.add(num1, num2);
// verify
assertEquals(5, result);
System.out.println("add");
}
public void testSubtract() {
assertEquals(4, Calculator.subtract(6, 2));//앞 숫자와 뒤 숫자가 같은지 비교하는 구문
assertEquals(3, Calculator.subtract(6, 3));
assertEquals(5, Calculator.subtract(6, 1));
System.out.println("Subtract");
}
public void testMultiply() {
assertEquals(4, Calculator.numtiply(2, 2));
System.out.println("Multiply");
}
public void testDevide() {
assertEquals(6, Calculator.divide(18, 3));
System.out.println("Devide");
}
}
------------------------콘솔 결과값 ------------------------------------------------
add
setUp
Multiply
setUp
Devide
setUp
Subtract
setUp
-------------------------------------------------------------------------------------
JUnit ver4 으로 테스트 한 예제 Calculator4Test ---------------------------------------
public class Calculator4Test {
@BeforeClass
public static void beforClass(){
System.out.println("BeforeClass");
//beforeClass 와 afterClass 두가지는 static 선언해야 에러가 안남 왜? 잘 모르겠음
//test 시작전 처음에 실행됨
}
@Before
public void before(){
System.out.println("before");
// before 메소드는 한가지 테스트 메소드 실행전에 실행됨
}
@Test
public void testAdd() {
// setup
int num1 = 3;
int num2 = 2;
// execute
int result = Calculator.add(num1, num2);
// verify
assertEquals(5, result);
System.out.println("add");
}
@Test
public void testSubtract() {
assertEquals(4, Calculator.subtract(6, 2));
assertEquals(3, Calculator.subtract(6, 3));
assertEquals(5, Calculator.subtract(6, 1));
System.out.println("Subtract");
}
@Test
public void testMultiply() {
assertEquals(4, Calculator.numtiply(2, 2));
System.out.println("Multiply");
}
@Test
public void testDevide() {
assertEquals(6, Calculator.divide(18, 3));
System.out.println("Devide");
}
@After
public void after(){
System.out.println("after");
// test 메소드 실행후에 매번 실행되는 after 메소드
}
@AfterClass
public static void afterClass(){
System.out.println("afterClass");
//모든 실행이 끝나면 마지막에 afterclass 메소드가 실행된다.
//여기도 마찬가지로 static 선언을 해줘야됨
}
}
------------------------------------------------------------------------------------
------------------------콘솔 결과값 ------------------------------------------------
BeforeClass
before
Subtract
after
before
add
after
before
Multiply
after
before
Devide
after
afterClass
-------------------------------------------------------------------------------------
(Junit 상 pass화면)
예제 2) 이제 2번째 예제인 예금 클래스에 대한 testcase를 작성하기를 해본다.
원본예제Account---------------------------------------------------------------------
public class Account {
static int money =0;
public Account(int i) {
this.money=i;
}
public int getBalance() {
return money;
}
public int deposit(int i){
this.money += i;
return money;
}
public int withdraw(int i) {
this.money -= i;
return money;
}
}
-------------------------------------------------------------------------------------
Junit4 테스트 Account4Test------------------------------------------------------------
public class Account4Test {
@BeforeClass
public static void beforClass(){
System.out.println("BeforeClass");
}
@Before
public void before(){
System.out.println("before");
}
@Test
public void TestgetBalance() {
Account account = new Account(10000);
assertEquals(10000, account.getBalance());
System.out.println("pass getBalance"+account.getBalance());
}
@Test
public void Testdeposit(){
Account account = new Account(10000);
int dep = account.deposit(5000);
assertEquals(15000, dep);
System.out.println("pass deposit" + dep);
}
@Test
public void Testwithdraw() {
Account account = new Account(10000);
int with = account.withdraw(2000);
assertEquals(8000,with);
System.out.println("pass withdraw" + with);
}
@After
public void after(){
System.out.println("after");
}
@AfterClass
public static void afterClass(){
System.out.println("afterClass");
}
}
-------------------------------------------------------------------------------------
콘솔 결과----------------------------------------------------------------------------
BeforeClass
before
pass getBalance10000
after
before
pass deposit15000
after
before
pass withdraw8000
after
afterClass
-------------------------------------------------------------------------------------
3... 이제 전체 테스트를 묶어서 실행해보는 방법 (메이븐을 안쓰면 이런 방법을 쓰더라)
Junit 3 버전일때 사용 방법-------------------------------------------------------------
public class Suite3Test extends TestCase {
public static Test suite(){
TestSuite suite = new TestSuite();
suite.addTestSuite(Calculator3Test.class);
suite.addTestSuite(SampleJunit3Test.class);
return suite;
}
}
-------------------------------------------------------------------------------------
Junit4 버전일때 사용방법--------------------------------------------------------------
@RunWith(Suite.class)
@SuiteClasses({Calculator4Test.class, SampleJunit4Test.class})
public class Suite4Test {
}
앞서 했던 두가지 테스트 클래스가 다 실행되었음-----------------------------------------
BeforeClass
before
Multiply
after
before
add
after
before
Subtract
after
before
Devide
after
afterClass
-------------------------------------------------------------------------------------
댓글 없음:
댓글 쓰기