Spring
[Spring]Assertions의 contains 상황별로 달리 사용하기
퉁그리
2022. 2. 20. 22:48
contains라는 함수는 복수로 요소들을 체크해야할 때 꽤나 편리한 함수다.
void containsTest() {
List<Integer> list = Arrays.asList(1, 2, 3);
// Success: 모든 원소를 입력하지 않아도 성공
assertThat(list).contains(1, 2);
// Success: 중복된 값이 있어도 포함만 되어 있으면 성공
assertThat(list).contains(1, 2, 2);
// Success: 순서가 바뀌어도 값만 맞으면 성공
assertThat(list).contains(3, 2);
// Fail: List 에 없는 값을 입력하면 실패
assertThat(list).contains(1, 2, 3, 4);
}
특이한 점은 string에도 쓸 수 있는 동시에 array나 set에도 쓸 수 있다.
@Test
void stringContainsTest() {
String str = "abc";
assertThat(str).contains("a", "b", "c");
}
@Test
void arrayContainsTest() {
int[] arr = {1, 2, 3, 4};
assertThat(arr).contains(1, 2, 3, 4);
}
@Test
void setContainsTest() {
Set<Integer> set = Set.of(1, 2, 3);
assertThat(set).contains(1, 2, 3);
}
여기서 더 디테일한 테스트를 하기 위한 함수 두개가 있다.
containsOnly
/*
* containsOnly 실패 케이스
*
* assertThat(list).containsOnly(1, 2); -> 원소 3 이 일치하지 않아서 실패
* assertThat(list).containsOnly(1, 2, 3, 4); -> 원소 4 가 일치하지 않아서 실패
*/
@Test
void containsOnlyTest() {
List<Integer> list = Arrays.asList(1, 2, 3);
assertThat(list).containsOnly(1, 2, 3);
assertThat(list).containsOnly(3, 2, 1);
assertThat(list).containsOnly(1, 2, 3, 3);
}
containsonly는 contains에서 원소의 종류일치가 조건으로 추가된다.
containsExactly
/*
* containsExactly 실패 케이스
*
* assertThat(list).containsExactly(1, 2); -> 원소 3 이 일치하지 않아서
* assertThat(list).containsExactly(3, 2, 1); -> list 의 순서가 달라서 실패
* assertThat(list).containsExactly(1, 2, 3, 3); -> list 에 중복된 원소가 있어서 실패
*/
@Test
void containsExactlyTest() {
List<Integer> list = Arrays.asList(1, 2, 3);
assertThat(list).containsExactly(1, 2, 3);
}
containsExactly는 contains에서 순서, 중복, 종류의 일치 조건들이 추가된다.
출처 : JUnit 5 에서 contains 로 포함 여부 테스트 :: 뱀귤 블로그 (tistory.com)