meaningful_life
meaningful life
meaningful_life
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • Programming (28)
      • Backend (25)
      • Machine Learning (1)
      • Infrastructure (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 백준
  • install
  • stringbuilder
  • git
  • flask
  • Database
  • 쿠버네티스
  • 자바의신
  • python
  • docker
  • kubectl
  • java
  • Kubernetes
  • linux
  • Spring
  • ubuntu
  • 머신러닝
  • 자바
  • ufw
  • error

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
meaningful_life

meaningful life

JUnit : 자바에서 사용하는 가장 대표적인 단위 테스트 프레임 워크
Programming/Backend

JUnit : 자바에서 사용하는 가장 대표적인 단위 테스트 프레임 워크

2021. 10. 3. 21:39
728x90

JUnit

TDD 사이클을 진행하는데 도움을 주는, Java에서 사용하는 가장 대표적인 단위 테스트 프레임 워크이다.

  • 테스트 결과가 예상과 같은지를 판별해주는 단정문(assertions)
  • 여러 테스트에서 공용으로 사용할 수 있는 테스트 픽스처(test fixture)
    • 일관된 테스트 실행환경
  • 테스트 작업을 수행할 수 있게 해주는 테스트 러너(test runner)

 

JUnit의 단정문

  • assertEquals : 두 값이 같은지 비교
  • assertSame : 두 객체가 동일한 객체인가 주소 값으로 비교
  • assertNotSame : 두 객체가 동일하지 않은 객체인가 주소 값으로 비교
  • assertTrue : 값이 참인지 비교
  • assertFalse : 값이 거짓인지 비교
  • assertNull : 값이 null 인지 비교
  • assertNotNull : 값이 null이 아닌지 비교
  • fail : 아직 테스트 케이스를 작성 중인데 완료하지 못한 채 구현을 중단해야 할 경우 적용

 

JUnit 4

  • @Test
    • Annotation을 사용하여 test라는 메소드 이름으로 시작해야 한다는 제약 해소
  • @BeforeClass, @AfterClass, @Before, @After : 테스트 픽스처 메소드
    • 실행순서
      • @BeforeClass
      • @Before → @Test → @After
      • @Before → @Test → @After
      • @Before → @Test → @After
      • @AfterClass
  • @Test(expected=Exception.class)
    • 예외 테스트
  • @Test(timeout=1000)
    • 테스트 시간 제한
  • @Ignore
    • 테스트 무시
  • assertArrayEquals( 값1, 값2)
    • 배열 비교의 지원
  • @RunWith
    • 테스트 러너에서 사용하는 기본 BlockJUnit4ClassRunner 대신에 테스트 러너를 지정
  • @SuiteClasses(Class[])
    • 여러개의 테스트 클래스를 한꺼번에 수행하기 위해 사용
  • 파라미터를 이용한 테스트
    • @RunWith(Parameterized.class)
    • @Parameters

 

Hamcrest : 비교 표현의 확장

Hamcrest는 다양한 Matcher들이 모인 Matcher 라이브러리이다.

  • Matcher : 필터나 검색 등을 위해 값을 비교할 때 좀 더 편리하게 사용할 수 있게 도와주는 라이브러리
  • 기존에는 JUnit에 곁들여 함께 사용하는 라이브러리였다면 JUnit 4.4 부터는 아예 JUnit에 포함되어 배포된다.
  • 개발자만이 읽을 수 있는 프로그래밍 언어라는 느낌보다 좀 더 문장체에 가까운 느낌으로 넓은 범주의 사람들이 함께 이해할 수 있는 형태로 만들어준다.

 

Matchers의 종류

  • Core
    • anything
    • describedAs
    • is
  • Logical
    • allOf
    • anyOf
    • not
  • Object
    • equalTo
    • hasToString
    • instanceOf, isCompatibleType
    • notNullValue, null Value
    • sameInstance
  • Beans
    • hasProperty
  • Collections
    • array
    • hasEntry, hasKey, hasValue
    • hasItem, hasItems
    • hasItemInArray
  • Number
    • closeTo
    • greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo
  • Text
    • equalToIgnoringCase
    • equalToIgnoringWhiteSpace
    • containsString, endsWith, startsWith
  • Sugar

hamcrest : http://hamcrest.org/JavaHamcrest/tutorial

 

Hamcrest Tutorial

Java Hamcrest Home Hamcrest Tutorial Introduction Hamcrest is a framework for writing matcher objects allowing ‘match’ rules to be defined declaratively. There are a number of situations where matchers are invaluable, such as UI validation or data filt

hamcrest.org

 

Hamcrest 적용시 다음과 같은 형식으로 변동..

  • assertEquals(getName(),getText())
  • → assertThat(getName(), is(equalTo(getText()));
  • assertTrue(10>0)
  • → assertThat(10, isGreaterThan(0))
  • ...
import lombok.Getter;
import lombok.Setter;
import org.junit.*;

import java.util.List;

import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsNot.not;

public class JunitTest {

    private static Person person;

    @Before
    public void testBefore(){
        System.out.println("before");
        person = new Person();
        person.setAge(18);
        person.setName("Hong Gil Dong");
    }

    @Test
    public void testEquals_같은지_비교(){
        assertThat(person.getName(), equalTo("Hong Gil Dong"));
    }

    @Test
    public void testNot_부정(){
        assertThat(person.getAge(), not(20));
    }

    @Test
    public void testAnyThing_모든(){
        assertThat(person.getName(), anything());
    }

    @Test
    public void testNull_공백확인(){
        assertThat(null, nullValue());
    }

    @Test
    public void testArray_포함여부(){
        List<Integer> list1 = List.of(1,2,3,4,5);

        assertThat(list1,hasItem(5));
    }

    @After
    public void testAfter(){
        System.out.println("After");
    }

}

@Getter
@Setter
class Person{
    private int age;
    private String name;
}

728x90

'Programming > Backend' 카테고리의 다른 글

API 명세서 뜯어보기 - StringTokenizer Class  (0) 2021.10.05
Mock && Mockito : 가짜 객체  (0) 2021.10.03
TDD : 테스트 주도 개발  (0) 2021.10.03
API 명세서 뜯어보기 - Functional interface  (0) 2021.10.02
API 명세서 뜯어보기 - StringBuilder && StringBuffer Class  (0) 2021.09.28
    'Programming/Backend' 카테고리의 다른 글
    • API 명세서 뜯어보기 - StringTokenizer Class
    • Mock && Mockito : 가짜 객체
    • TDD : 테스트 주도 개발
    • API 명세서 뜯어보기 - Functional interface
    meaningful_life
    meaningful_life
    하루하루가 의미 있고 가치 있는 삶이 될 수 있길. 그리고 나의 추억과 각종 지식의 기록과 이를 공유함으로써 다른 사람에게도 도움이 되길...

    티스토리툴바