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 적용시 다음과 같은 형식으로 변동..
- 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 |