xUnit
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/
JUnit
• 단위 테스트 Framework 중 하나
• 오픈소스, 최신 relese : Junit 5, Junit 4.12
• Annotation 기반 동작 방식
• Assert statement(단정문)로 테스트 케이스 결과를 판단
• 테스트 결과 확인(성공 or 실패), 수행 시간 확인 가능
JUnit 장점
• 실제 서비스 소스와의 분리
• 테스트 대상을 분석하고자 하는 단위에만 집중
• main()으로 테스트 X ---> Junit 프레임워크가 직접 코드 실행
• 테스트 케이스와 결과를 문서가 아닌 테스트 클래스로 남김
• 나아가 TDD의 수단으로 활용
• 테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링
JUnit annotation
• @Test - 해당 메소드는 테스트 대상 메소드
• @BeforeClass - 해당 클래스 테스트가 수행되기 최초에 한번 수
행
• @AfterClass - 해당 클래스 테스트가 모두 수행되고 마지막에
한번 수행
• @Before – 테스트 메소드가 수행되기 전에 수행
• @After – 테스트 메소드가 수행된 후에 수행
JUnit 테스트 라이프사이클
assert statement
• 대표적인 assert 관련 메소드
• assertEqual : 두 객체의 Equality 비교
• assertSame : 두 객체의 Identity 비교 (hashCode 주소값)
• assertTrue/False : 예상 값의 참/거짓을 판별
• assertNull/NotNull : 대상 값이 null/not null 이면 참
• fail([message]) : 호출 즉시 테스트 케이스를 실패로 판정
assertThat
• public static <T> void assertThat(T actual, Matcher<? super T> matcher)
• hamcrest 라이브러리
• Matcher 인터페이스와 *Matcher 구현체들
• JUnit 특정 버전 이후로 hamcrest 라이브러리 dependency
• assertThat(테스트 대상, Matcher 구문);
• assertThat("메시지", 테스트 대상, Matcher 구문);
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
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);
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)
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/
SpringMVC JUnit Test
• JUnit + org.springframework.test 패키지
• MockMvc mock-up 객체 사용
• http://jhmocu.tistory.com/133
참고
• https://ko.wikipedia.org/wiki/XUnit
• http://www.nextree.co.kr/p11104/
• https://junit.org/junit5/
• http://javacan.tistory.com/entry/JUnit-5-Intro
• http://jhmocu.tistory.com/133

Backend Master | 3.2.1 Test - JUnit

  • 1.
  • 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 – 테스트 메소드가 수행된 후에 수행
  • 6.
  • 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 특징 • Java1.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 5is 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
  • 14.
    참고 • https://ko.wikipedia.org/wiki/XUnit • http://www.nextree.co.kr/p11104/ •https://junit.org/junit5/ • http://javacan.tistory.com/entry/JUnit-5-Intro • http://jhmocu.tistory.com/133

Editor's Notes

  • #3 처음 켄트 벡(Kent Beck) 이라는 사람이 테스트 프레임워크를 고안. SUint 이라는걸 처음 만들었는데 나중에 에릭 감마(Erich Gamma) 라는 사람과 Java에 포팅하여 JUnit을 만들어냄. 그 이후에 다양한 언어에 포팅 되어져서 CppUnit(C++ 용), NUnit(.NET 용) 같은 것이 나왔고, 이를 전부 xUnit 이라고 통칭하게 되었음. 그 중에서 저희는 JUnit....
  • #5 지식 내재화 or 다른 개발자한테 시스템을 이해시킬 때.. TDD (RED, GREEN, REFACTORING) 테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링
  • #8 - 그 외에도 굉장히 많음