2. xUnit
• 여러 단위 테스트 프레임워크를 통칭
xUnit 이름 해당 언어 관련 사이트
CUnit C http://cunit.sourceforge.net/
CppUnit C++
https://sourceforge.net/projec
ts/cppunit/
PHPUnit PHp https://phpunit.de/
PyUnit Python http://pyunit.sourceforge.net/
JUnit Java http://junit.org/
3. JUnit
• 단위 테스트 Framework 중 하나
• 오픈소스, 최신 relese : Junit 5, Junit 4.12
• Annotation 기반 동작 방식
• Assert statement(단정문)로 테스트 케이스 결과를 판단
• 테스트 결과 확인(성공 or 실패), 수행 시간 확인 가능
4. JUnit 장점
• 실제 서비스 소스와의 분리
• 테스트 대상을 분석하고자 하는 단위에만 집중
• main()으로 테스트 X ---> Junit 프레임워크가 직접 코드 실행
• 테스트 케이스와 결과를 문서가 아닌 테스트 클래스로 남김
• 나아가 TDD의 수단으로 활용
• 테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링
5. JUnit annotation
• @Test - 해당 메소드는 테스트 대상 메소드
• @BeforeClass - 해당 클래스 테스트가 수행되기 최초에 한번 수
행
• @AfterClass - 해당 클래스 테스트가 모두 수행되고 마지막에
한번 수행
• @Before – 테스트 메소드가 수행되기 전에 수행
• @After – 테스트 메소드가 수행된 후에 수행
7. assert statement
• 대표적인 assert 관련 메소드
• assertEqual : 두 객체의 Equality 비교
• assertSame : 두 객체의 Identity 비교 (hashCode 주소값)
• assertTrue/False : 예상 값의 참/거짓을 판별
• assertNull/NotNull : 대상 값이 null/not null 이면 참
• fail([message]) : 호출 즉시 테스트 케이스를 실패로 판정
8. assertThat
• public static <T> void assertThat(T actual, Matcher<? super T> matcher)
• hamcrest 라이브러리
• Matcher 인터페이스와 *Matcher 구현체들
• JUnit 특정 버전 이후로 hamcrest 라이브러리 dependency
• assertThat(테스트 대상, Matcher 구문);
• assertThat("메시지", 테스트 대상, Matcher 구문);
9. assertThat
• 자연스럽고 읽기 쉬운 코드를 위해 사용
• 사용전
• assertEquals(“Youngwoo”, customer.getName());
• 사용후
• assertThat(customer.getName(), is(“Youngwoo”));
• assertThat("Zero is one", 0, is(1)); // fails
• assertThat("Zero is not one", 0, is(not(1))); // passes
10. JUnit4 특징
• Java 1.5 annotation 지원
• test라는 글자로 method 이름을 시작해야 하는 제약 해소
• 더 유연한 픽스처(Fixture)
• @BeforeClass, @AfterClass, @Before(JUnit3 setUp 메소드), @After(JUnit3 tearDown
메소드)
• 예외 테스트
• @Test(expected=NumberFormatException.class)
• 시간 제한 테스트
• @Test(timeout=1000)
• 테스트 무시
• @Ignore(“this method isn’t working yet”)
• 배열 지원
• assertArrayEquals([message], expected, acutal);
11. JUnit4 특징
• @RunWith(클래스 이름.class)
• JUnit Test 클래스를 실행시키는 러너(Runner)를 명시적으로 지정
• ex) @RunWith(SpringJUnit4ClassRunner.class)
• @RunWith는 junit.runner.Runner를 구현한 외부 클래스를 인자로 갖는
다.
• @SuiteClasses(Class[])
• 보통 여러 개의 테스트 클래스를 수행하기 위해 쓰임
• @RunWith를 이용해 Suite.class를 러너로 사용한다.
• @RunWith(Suite.class)
@SuiteClasses(ATest.class, BTest.class, CTest.class)
12. JUnit5
• JUnit 5 is the result of JUnit Lambda and its crowdfunding
campaign on Indiegogo.
• http://javacan.tistory.com/entry/JUnit-5-Intro
• https://junit.org/junit5/
13. SpringMVC JUnit Test
• JUnit + org.springframework.test 패키지
• MockMvc mock-up 객체 사용
• http://jhmocu.tistory.com/133
처음 켄트 벡(Kent Beck) 이라는 사람이 테스트 프레임워크를 고안. SUint 이라는걸 처음 만들었는데 나중에 에릭 감마(Erich Gamma) 라는 사람과 Java에 포팅하여 JUnit을 만들어냄.그 이후에 다양한 언어에 포팅 되어져서 CppUnit(C++ 용), NUnit(.NET 용) 같은 것이 나왔고, 이를 전부 xUnit 이라고 통칭하게 되었음.
그 중에서 저희는 JUnit....
지식 내재화 or 다른 개발자한테 시스템을 이해시킬 때..
TDD (RED, GREEN, REFACTORING)
테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링