Junit

Similar documents
JUNIT 실습및발표

PowerPoint 프레젠테이션

2 JUnit 이필요한이유 기졲의테스트방식 클래스에서테스트최소단위는메소드이며어떤것이유효한지를찾으려면하나씩테스트해야함테스트구현하는과정에서한번의단일테스트가실패할경우, 후속테스트가전혀수행되지않아전체적인테스트가불가능테스트를자동으로시작해주는프레임워크가없어각테스트를시작하기위해서는

PowerPoint 프레젠테이션

소프트웨어공학개론 Tutorial #2: Junit Eun Man Choi

JUnit & Eclipse

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Presentation

PowerPoint 프레젠테이션

C# Programming Guide - Types

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JUnit 4 의새로운기능자바 5 주석덕분에 JUnit 4 가이전보다더욱가벼워졌고유연해졌다. 일부흥미로운새기능을위해이전의엄격한명명규칙과상속계층구조가사라졌다. 다음은 JUnit 4 의새로운기능을간략히설명해놓은목록이다. 매개변수테스트예외테스트제한시간테스트유연한픽스쳐테스트를

PowerPoint Presentation

PowerPoint Presentation

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

PowerPoint Presentation

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

JAVA PROGRAMMING 실습 05. 객체의 활용

화판_미용성형시술 정보집.0305

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

유니티 변수-함수.key

슬라이드 1

문서의 제목 나눔명조R, 40pt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

C++ Programming

Design Issues

어댑터뷰

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

PowerPoint 프레젠테이션

Cluster management software

ppt.glzy8.com提供海量PPT模板免费下载!

ThisJava ..

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

JAVA PROGRAMMING 실습 09. 예외처리

JVM 메모리구조

Microsoft PowerPoint - jfeature장범석서재원박동현.pptm

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - C++ 5 .pptx

UnitTesting(ÇѱÛÆÇ).hwp

Spring Boot

PowerPoint Presentation

02 C h a p t e r Java

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

표지

17장 클래스와 메소드

비긴쿡-자바 00앞부속

PowerPoint Template

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

쉽게


1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

09-interface.key

쉽게 풀어쓴 C 프로그래밍

adfasdfasfdasfasfadf

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

chap 5: Trees

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

PowerPoint 프레젠테이션

2002년 2학기 자료구조

Network Programming

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

05-class.key

JAVA PROGRAMMING 실습 02. 표준 입출력

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

12-file.key

PowerPoint Presentation

PowerPoint 프레젠테이션

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

쉽게 풀어쓴 C 프로그래밍

2. 기능요약 요구사항들을기록하고이들을 JUnit Test Case 와매치함으로써프로세스를단순화 주요기능단위테스트프로그래밍언어지원시스템테스트 GUI / Console 파라미터가있는메소드의테스트 TDD 지원여부지원 F#, C#, C++ 등닷넷환경지원모두지원 2.5버전이상

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

Microsoft Word - java19-1-midterm-answer.doc

교육자료

슬라이드 1

슬라이드 1

슬라이드 1

제11장 프로세스와 쓰레드

신림프로그래머_클린코드.key

Microsoft PowerPoint - 3조-최종발표.pptx

rmi_박준용_final.PDF

4장.문장

Microsoft PowerPoint - RMI.ppt

Microsoft PowerPoint - 2강

Transcription:

JUnit(Unit Test) Team 1 200310394 남장우 200412342 이종훈

Contents 1. UnitTest 2. JUnit 3. JUnit Example 4. JUnit & Friends 5. Q & A Unit Test JUnit JUnit Example(1) JUnit & Friends Reference Unit Test JUnit Test Code JUnit Example(2) TestNG Diagram JUnit Test JUnit Example(3) JUnit VS. TestNG Routine

JUnit 1. UNIT TEST

Unit Test Unit Test 테스트대상이되는코드기능의아주작은특정영역, 즉개발자가작성한코드조각을 Test ( 대개특정상황에서의특정메서드를 Test해본다.) Why 개발자가작성한어떤코드의조각이코드작성의의도대로동작하는지증명하기위해수행한다. 개발단계부터효율적인테스팅을행하여전체프로젝트진행시간을단축시키고결함수정이용이하기때문에수행한다.

Unit Test (Cont d) Good Unit Test 모든메서드를테스트하는것이아니라상식수준의확인을통해단위코드가의도한대로동작하는지여부를판단하는단계이다. 물론많은양의코드를테스트하는것이좋다. 이상적으로는코딩전에테스트케이스를작성하여구현시보조자료로활용하는것이좋다. ( TDD 기법 ) Cf. TDD(Test-driven Development, 테스트주도개발 ) 자동화된테스트로개발을이끌어가는개발방식을테스트주도개발이라부른다. TDD 는분석기술이며, 설계기술이며, 개발의모든활동을구조화하는기술이다. 테스트주도개발에서는아래의두가지규칙만따른다 1. 오직자동화된테스트가실패했을경우에만새로운코드를작성한다. 2. 중복을제거한다.

Unit Test (Cont d) 그렇다면무엇을테스트할것인가? Right-BICEP Right - 결과가옳은가? B - 모든경계 ('B'oundary) 조건이 correct 한가? < 경계조건에서확인해봐야할사항들 - 'CORRECT'> 형식일치 ('C'onformance) 값이기대한형식과일치하는가? 예 ) 최상위도메인이름이없는이메일주소 fred@foobar 이넘어온다면?) 순서 ('O'rdering) 적절히순서대로되어있거나그렇지않은값인가? 범위 ('R'ange) 적당한최소값과최대값사이에있는값인가? 참조 ('R'eference) 코드가자기가직접제어하지않는외부코드를참조하는가? 존재성 ('E'xistance) 값이존재하는가? 개체수 ('C'ardinality) 확실히충분한값이존재하는가? 개수를정확히필요한만큼갖고있다던가, 정확히필요한만큼만들었다는것을확인해야한다. 시간 ('T'ime) ( 절대적으로그리고상대적으로 ) 모든것이순서대로일어나는가? 제시간에? 때맞추어? I - 역 ('I'nverse) 관계를확인할수있는가? C - 다른수단을사용해서결과를교차확인 ('c'ross-check) 할수있는가? E - 에러조건 ('e'rror condition) 을강제로만들어낼수있는가? P - 성능 ('P'erformance) 특성이한계내에있는가?

Unit Test (Cont d) Goal 성능의테스트에중점을두지않고, 단지해당코드가의도대로동작하는지테스트하고, 해당부분들이의도대로동작한다는확신을쌓아그것들을조립하여전체동작시스템을테스트하는단계로나아가는것.

Unit Test Diagram Unit Test Diagram 실행 예측가능한실행결과값 테스트프레임워크 코드조각 Success/Fail

JUnit 2. JUNIT

JUnit Unit Test 는큰코드내의작은조각을테스트한다. 테스트하려면실행을시키고결과값을비교해야한다. JAVA 코드는콘솔실행을위해선 main 메서드가필요하다. 그럼테스트하는모든조각코드에 main 메서드를붙여야하나? 그것이가능한가?

JUnit JUnit X-Unit Project Line up중 JAVA 언어로작성된코드를 Unit Test하기위한 Tool이다. main이아닌메서드를테스트하기위해테스트를도와주는 Framework이다. JUnit이가지고있는 Runner를통해테스트를진행 Current Version : JUnit 4.8.1 (2009. 12. 8) 4.0 버전이상에서 JAVA 5의 @( 어노테이션 ) 기능을활용하여좀더쉽게테스트코드를작성할수있게되었다.

JUnit Test Code

JUnit Test Code (Cont d) assertequals([string message], expected, actual) 변수혹은객체두개의값이같은지검사한다. 어떤형의객체이던동일성테스트를할수있다. assertsame([string message], Object expected, Object actual) 두객체가같은인스턴스인지검사한다. assertnotsame([string message], Object expected, Object actual) 두객체가다른인스턴스인지검사한다. Cf. Expected 는기대값이고 actual 은테스트대상이된코드에서실제로나오는값이다. 또, message 는테스트가실패할경우 failure trace 에출력될문자열매개변수이며생략할수있다.

JUnit Test Code (Cont d) assertnull([string message], Object object) 해당객체가 Null 값인지검사한다. assertnotnull([string message], Object object) 해당객체가 Null 이아닌지검사한다. asserttrue([string message], boolean condition) 조건문이 true 인지검사한다. assertfalse([string message], boolean condition) 조건문이 false 인지검사한다.

JUnit Test Code (Cont d) @Test Junit 4.x 이상에서는 TestCase 클래스를상속하지않고 @Test 라는 어노테이션을사용하여테스트클래스로인식한다. @Test(timeout) 파라미터로 ms 단위의 timeout 을지정하여해당테스트메서드가 이를초과하면 fail 처리한다. @Test(expected) try/catch 문이없는상황에서예외상황이발생하였을때테스트를 중지하지않고해당예외발생시계속테스트를진행한다.

JUnit Test Code (Cont d) @RunWith 프레임워크에지정된러너가아닌사용자가지정된러너를통해특정클래스를손쉽 게실행할수있게해준다. @SuiteClasses 테스트할클래스목록을지정한다. @Parameters JUnit에서는테스트메소드에직접파라미터를넘길수없으므로, 매개변수없는테스트메소드를작성한다. @Parameter로파라미터제공메소드로정의한다. 제공되는파라미터를받아처리하는생성자를작성한다. 클래스수준에서테스트가 Parameterized 클래스와함께실행되도록 @RunWith 주석을지정한다. Suite? Junit 의 Suite 는여러클래스를한번에테스팅할때사용한다.

JUnit Test Code (Cont d) @Ignore(comment) 바로다음의테스트를무시한다. comment는개발자가해당테스트를무시하는이유를작성하여알아보기쉽게한다.( 일종의주석처리 ) @Before, @After 각테스트를진행하기전에테스트중에공통으로사용하는객체 들을초기화하고릴리즈하기위한방법이다. @BeforeClass, @AfterClass @Before, @After 와비슷하며, 모든테스트동안단한번만호출 하고자할때사용한다.

JUnit 3. EXAMPLE

JUnit Example(1) import org.junit.assert; import org.junit.test; import prac01.hello; public class HelloTest { @Test public void Test() { Hello hello = new Hello(); //return value: //hello.calc1() = 30 //hello.calc2() = 25 //hello.calc3() = 22 Test Code Example(assertion) } } String[] array1 = {"a", "b", "c"}; String[] array2 = {"a", "b", "c"}; String[] array3 = {"a", "b", "d"}; // Assertion Assert.assertNotSame(hello.calc1(), hello.calc2()); Assert.assertNotNull("hello is not null.", hello); Assert.assertTrue(hello.calc1() == 30); Assert.assertEquals(array1, array2); Assert.assertEquals("Not Equal", array1, array3); //success //success //success //success //fail

JUnit Example(1) (Cont d)

JUnit Example(1) (Cont d)

JUnit Example(2) Test Code Example(fixture) import org.junit.*; public class TestFixture { private int x; @Before public void init() { x = 20; } @After public void release() { x = 0; } @Test public void countone() { for (int i = 0; i < 100; i++) { x++; } System.out.println("countOnes's x=" + x); } } *@Ignore @Test public void counttwo() { for (int i = 0; i < 10; i++) { x++; } System.out.println("countTwo's x=" + x); }

JUnit Example(2) (Cont d)

JUnit Example(2) (Cont d)

JUnit Example(3) import java.util.arrays; import java.util.collection; private int finput; private int fexpected; Test Code Example(parameters) import org.junit.*; import org.junit.runner.runwith; import org.junit.runners.parameterized; import org.junit.runners.parameterized.parameters; public class TestParam { @RunWith(Parameterized.class) public static class FibonacciTest { @Parameters public static Collection data() { return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } }); } } } public FibonacciTest(int input, int expected) { finput = input; fexpected = expected; } @Test public void test() { Assert.assertEquals(fExpected, Fibonacci.compute(fInput)); }

JUnit Example(3) (Cont d)

JUnit 4. JUNIT & FRIENDS

JUnit & Friends Unit Test JAVA C Objective- C.NET DB ETC JUnit TestNG JTiger Gunit CUT Check ObjcUnit OCUnit Nunit DBUnit.

TestNG TestNG JUnit 3.x버전시개발된 Test Tool로 Junit 3.x 버전이안고있는문제점들을파악하고좀더개발자에게단순하고확장성있고, 실용적인테스팅도구를제공하기위해개발된 Unit Test Tool이다. Unit Test만이아닌통합 / 기능테스트기능도포함하고있다. TestNG가파악한 JUnit의문제점 JAVA 언어는단일상속이기때문에 TestCase클래스를확장할필요성이매우제한적이다.(3.x버전) 매개변수들을 JUnit의테스트메소드에전달하는것과 setup() 과 teardown() 메소드에전달하는것은불가능하다. 실행모델이익숙하지않다 : 테스트클래스는테스트메소드가실행될때마다다시인스턴스화된다. 복잡한프로젝트에서다른테스트 suite의관리는트릭을많이써야한다. 위의문제점들은 Junit도 4.x버전이릴리즈되면서모두상쇄시킨문제점들이다.

TestNG (Cont d) TestNG의장점 XML을이용하기때문에확장및변경이용이하다. Test후자동으로 HTML로리포트를생성해준다. Test그룹화하여그룹화되어있는메소드들만 Testing할수있다. TestNG의단점 많은기능을제공하긴하지만그마만큼초심자가사용하기엔어려울수있다. 많은유형의 Annotation을지원하기때문에자칫테스팅코드가복잡해질수있다.

TestNG (Cont d) @Configuration aftertestclass : true일때, test Class실행완료후에실행 aftertestmethod : true일때, test Method실행완료후에실행 beforetestclass : true일때, test Class실행전에실행 beforetestmethod : true일때, test Method실행전에실행 @ExpectedExceptions Test Method 실행시발생할 Exception List 지정 @Test enable : false일때, test진행시제외된다. groups : Class, Method를특정 Group에포함시킨다. Suite에서 Group별설정이가능하다.

TestNG (Cont d) TestNG Test Class Life Cycle

JUnit VS. TestNG JUnit TestNG 4.X 버전에와서사용자의 편의성을더욱높여줌 JUnit 에비해좀더유연하 다. IDE & 타테스팅도구와의 강력한호환성을보임 JAVA 의 Annotation 기능을 먼저사용편의성높임 가장널리쓰이고쉽게쓸 수있다. Junit 3.x 버전의기능중 불필요하고어려운것들 을쉽게바꿔릴리즈

JUnit 5. Q & A

Reference WebSite http://www.junit.org http://www.javajigi.net http://younghoe.info/255 http://www.ibm.com/developerworks/kr/library/tutorial/j-junit4 http://decoder.tistory.com/21 http://www.devpia.com/maeul/contents/detail.aspx?boardid=4244& MAEULNO=4&no=31527&page=1 http://www.java2go.net/blog/66?tssession=26df0dd05f49a9ec27177 f7e386c80aa http://blog.naver.com/inter999?redirect=log&logno=140047093842 Text 실용주의프로그래머를위한단위테스트 with JUnit 이클립스프로젝트필수유틸리티 Subversion, Ant, JUnit, Trac