PC

블로그 이미지

DAVID

160627: 72회차

Programming 2016. 6. 27. 15:56

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


[06] 단위테스트 프레임워크 JUnit 3

[01] JUnit
 
- 에릭감마와 켄트 백이 탄생시킨 Junit은 현재 전 세계적으로 가장 널리 사용하는
  Java 단위 테스트 프레임워크다. 

//이런 거를 xunit이라고 함
dunit cunit junit

- 외부 테스트 프로그램(케이스)을 작성하여 System.out으로 번거롭게 디버깅하지
  않아도 된다.
- 프로그램 테스트 시 걸릴 시간도 관리할 수 있게 해주며 오픈 소스이다.
- 플러그인 형태로 Eclipse에 포함되어 있다. 
- 어느 정도 개발이 진행되면 프로그램에 대한 단위 테스트는 반드시 수행한다.
- JUnit은 보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위 테스트를 쉽게
  해주는 테스트용 Framework 이다. 
- 오픈소스 프로젝트 방식이며 꾸준히 버전업되고 있다.
- Junit 단위 테스트의 제공 기능
  . assertions : 테스트결과값과 예상값이 같은지 비교하는 단정문
  . test fixture : 일관된 테스트 실행환경
  . test runner : 테스트 작업수행을 위한 테스트 실행 클래스
  . 단위 테스트 케이스와 단위 테스트 메소드
 
1. JUnit3
 
1) 규칙
- TestCase 상속 //JUnit3에서는 상속 필수 JUnit4에서는 필요없음 
- 테스트메소드 이름은 test로 시작
---------------------------------------------------
public class AccountTest extends TestCase {
 
                :
 
public void testAccount() {
fail("Not yet implemented");
}
 
       :
}
 
----------------------------------------------------
 
2) 테스트 픽스처 메소드
- setUp() : 테스트 메소드 실행전 호출
  자원할당, 객체생성, DB연결등 테스트 환경준비
 
- tearDown() : 테스트 메소드 실행후 호출
  자원해제, 연결해제등 뒷정리



 
 
3) 단정문 // []는 해도 되고 안해도 되고
- assertEquals([msg],예상값,실제값) : 두값이 같은지 비교
- assertTrue(([msg],예상값) : 참/거짓을 판별하는 단정문
- assertFalse
- assertNull([msg],예상값) : null 여부를 판단하는 단정문 
- assertNotNull
- assertSame([msg],예상값,실제값) : 구 객체가 동일한 객체인지 해쉬코드 비교
- assertNotSame
- fail([mgs]) : 이메소드 호출되면 해당 테스트 케이스는 그 즉시 실패한다.
 
 
4) 테스트 러너
- 테스트 실행 클래스로 Swing UI, 텍스트, Java AWT UI등 세가지 실행방법 제공
- junit.swingui.TestRunner.run(테스트클래스.class)
- junit.textui.TestRunner.run(테스트클래스.class)
- junit.awtui.TestRunner.run(테스트클래스.class)
 
 
5) 테스트 스위트
- 여러개의 테스트 케이스를 한꺼번에 수행하고자 할때 사용
- 테스트 스위트? 테스트 케이스와 다른 테스트 스위트를 포함시킬 수 있다.
- 메소드는 반드시 public static Test suite()여야 한다.
- 테스트 추가는 sute.addTestSuite(테스트클래스.class) 형식을 갖는다.


6) JUnit 3의 테스트

- test.Account.java 클래스 생성


package test;
 
public class Account {
int account;
public Account(int i){
account = i;
}
public int getBalance(){
return account;
}
 
/** 출금 **/
public void withdraw(int i) {
account =account- i;
 
}
/** 예금 **/
public void depoit(int i) {
account=account+i;
 
}
}
 




- test.AccountTest.java 생성









- 자동 생성된 AccountTest.java class를 아래처럼 바꾼다.

package test;
 
import junit.framework.TestCase;
 
public class AccountTest extends TestCase {
 
Account account;
 
protected void setUp() throws Exception {
account = new Account(10000);
}
 
protected void tearDown() throws Exception {
super.tearDown();
}
 
public void testAccount() {
//fail("Not yet implemented");
}
 
public void testGetBalance() {
assertEquals(10000, account.getBalance());
}
 
public void testWithdraw() {
account.withdraw(1000);
assertEquals(9000, account.getBalance());
}
 
public void testDepoit() {
account.depoit(1000);
assertEquals(11000, account.getBalance());
}
 
}
 

- 실행 방법  및 결과

AccountTest.class 선택 -> Run As -> JUnit Test





- 테스트 케이스는 독립적으로 수행하므로 테스트 메소드 수행전 테스트 클래스 자체를 초기화 한다.
- 각각의 테스트 메소드만 수행하는 식으로 다른 테스트 메소드들로 인한 영향을 최소한다.


-  Account.java class의  생성자 아래 코드 추가

    System.out.println("생성자 호출:"+account);

- JUnit Test 실행 후  Console 결과 확인(메소드 수만큼 Account 클래스 객체생성)


생성자 호출:10000
생성자 호출:10000
생성자 호출:10000
생성자 호출:10000



[07] 애노테이션 기반의 JUnit 4
[01] JUnit 4
1. JUnit 4의 특징
 
- Java 5의 애노테이션 지원
 
- test라는 글자로 method 이름으로 시작해야 하는 제약 해소
  test 메소드는 @Test 선언
 
- 애노테이션 기반 픽스처
  @BeforeClass, @AfterClass, @Before, @After
 
- 예외 테스트
  @Test(expected=NumberFormatException.class)
 
- 시간 제한 테스트
  @Test(timeout=1000)
 
- 테스트 무시
  @Ignore("this method isn't working yet")
 
- 배열 지원
  assertAttrayEquals([msg],예상값,실제값);
 
- @RunWith(클래스이름.class)
  JUnit Test 클래스를 실행하기 위한 러너(Runner)를 명시적으로 지정한다.
  @RunWith는 junit.runner.Runner를 구현한 외부 클래스를 인자로 갖는다.
 
- @SuiteClasses(Class[])
  보통 여러 개의 테스트 클래스를 수행하기 위해 쓰인다. @RunWith를 이용해 
  Suite.class를 러너로 사용한다.
 
- 파라메터를 이용한 테스트
  @RunWith(Parameterized.class)
  @Parameters
  public static Collection data(){
:
  }



1. @Test 
- JUnit 4는 메소드 이름과 관계없이 @Test 애노테이션만 선언하면 테스트 메소드로 인식한다.
- 더이상 test로 메소드의 이름을 시작하지 않아도 된다.
- JUnit 3에서 testDeposit 대신 testDepoist으로 타이핑 오타를 내면 실행이 안된다.
 그러나 JUnit4 @Test 선언하면 실행이 잘된다.

2. 픽스처 메소드 추가 지원
- JUnit 3는 setUp(), tearDown() 만 지원
- JUnit 4는 @Before, @After 애노테이션으로 같은 기능의 메소드 선언
- JUnit 4는 @BeforeClass, @AfterClass 애노테이션으로 하나의 테스트 클래스 내에서
  한 번만 실행하는 메소드 만들수 있다.






3. 예외 테스트
- JUnit 3에서는 예외처리를 테스트하려면 try/catch문을 사용해야만 했다.
- JUnit 4에서는 애노테이션을 이용해서 아래처럼 코딩할 수 있다.

@Test(expected=NumberFormatException.class)
public void testException(){
      String value = "a123";
     System.out.println(Integer.parseInt(value));
}

- expected 값으로 예외 클래스를 지정했을 때, 만일 테스트 메소드 내에서 해당 예외가 
  발생하지 않으면  테스트 메소드는 실패로 간주한다.


4. 테스트 시간 제한
- 밀리초 단위의 시간을 정해준 후 해당 시간 내에 테스트 메소드가 수행완료가 되지
  않으면 실해한 테스트 케이스로 간주하다.
 
@Test(timeout=5000)
public void testPingback() throws Exception
        :
}


5. 테스트 무시
- @Ignore 가 선언된 메소드는 해당 애노테이션을 지울때까지 수행하지 않는다.


6. 배열 지원
- 배열을 비교할 수 있다 (assertArrayEquals(names, anotherNames);
- 배열의 순서가 다르면  테스트가 실패한다.


7. JUnit 4의 테스트 실행 

- Terminal.java 생성


package test;
 
public class Terminal {
  private String id;
  private String pw;
  private String msg;
 
  public void netConnect(){
 System.out.println("터미널 접속");
  }
  public void netDisConnect(){
 System.out.println("터미널 접속 해제");
  }
  public void logon(String id, String pw){
 this.id = id;
 this.pw = pw;
 System.out.println("로그인");
 
  }
  
  public void logoff(){
 System.out.println("로그오프");
  }
  
  public boolean isLogon(){
 if(id!=null && pw!=null){
 return true;
 }else{
 return false;
 }
  }
public void sendMessage(String msg) {
this.msg = msg;
 
}
public Object getReturnMsg() {
return msg;
}
  
 
}
 

- TerminalTest.java 생성



- 자동으로 생성된 TerminalTest.java의 메소드의 내용 수정.

 
package test;
 
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 TerminalTest {
 
private static Terminal term;
 
@BeforeClass
public static void setUpBeforeClass() throws Exception {
term = new Terminal();
term.netConnect();
}
 
@AfterClass
public static void tearDownAfterClass() throws Exception {
term.netDisConnect();
}
 
@Before

//test method 호출 될 때마다 매번 호출됨
public void setUp() throws Exception {
term.logon("user1", "1234");
}
 
@After

//test method 호출 될 때마다 매번 호출됨
public void tearDown() throws Exception {
term.logoff();
}
 
@Test
public void TerminalConnected() throws Exception{
assertTrue(term.isLogon());
System.out.println("== logon test");
}
 
@Test
public void getReturnMsg() throws Exception{
term.sendMessage("hello");
assertEquals("hello", term.getReturnMsg());
System.out.println("== message test");
}
}


- 실행및 결과확인 -> Run As ->JUnit Test
 

@BeforeClass 
@Before @Test @After
@Before @Test @After
@Before @Test @After
...
@AfterClass의 순서인것

assert 친구들이 리턴값은 없는 것 - 그냥 성공 - 초록색 / 실패 - 뻘건색 뜨는 것














 



5. 수업

진도: 

hw: 


6. 할것


내 홈페이지 (모델1방식) -> 모델2 방식으로 고친 다음에 스프링으로 고치기


JUnit & DBUnit 쓸 예정


spring_blog -> bbs    

'Programming' 카테고리의 다른 글

160629: 74회차  (0) 2016.06.29
160628: 73회차  (0) 2016.06.28
160624: 71회차  (0) 2016.06.24
160623: 70회차  (0) 2016.06.23
160622: 69회차  (0) 2016.06.22
Posted by DAVID
블로그 이미지

by DAVID

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

글 보관함

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

카테고리

PC (112)
Programming (109)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
DAVID's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

PC

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • PC (112)
    • Programming (109)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바