시험에서 AllMatch식 처리를 함부로 하지 마라
무슨 말?
시험을 대전제로 썼는데 그 시험에 실패했을 때를 고려했나요?이렇게 되면
구체적인 예에 관해서는 여러 가지 견해가 있다.
어떤 상황입니까?
예를 들어 사용자 일람표를 가져올 때 50명 이하의 사용자만 ID를 받을 수 있는지 테스트하려고 한다.
(이제 실제로 이런 테스트를 진행할지 모르겠다.)
사용자 소유
id
.public class User {
private final Integer id;
// コンストラクタ・ゲッターは省略
}
allMatch 설치 사용
자,
getUserList
이런 방법으로 사용자를 얻고, 결단 ID는 50 이하입니다!public class UserListTest {
@Test
public void test_getUserList() {
List<User> userList = getUserList();
assertTrue(userList.stream().allMatch(user -> user.getId() <= 50));
}
}
됐다!아주 간단하게 썼어요. 느낌이 좋아요.🤔
뭐가 안 좋아요?
만약 이런 시험이라면 시험에 실패할 때 무엇을 틀렸는지 파악하기 어렵다.
예를 들어
id
=60의 사용자가 목록에 포함될 때 다음과 같은 로그를 출력합니다.expected: <true> but was: <false>
이렇게 되면 어떤 데이터가 포함되어 있는지 모르겠다userList
. 왜 테스트에 실패했는지 모르겠다.시험해 보다
public class UserListTest {
@Test
public void test_getUserList() {
List<User> userList = getUserList();
List<User> filtered = userList.stream()
.filter(user -> !(user.getId() <= 50))
.collect(Collectors.toList());
assertEquals(filtered, Collections.emptyList());
}
}
이렇게 ID가 50 이하인 사용자를 삭제하고 그 결과가 빈 목록과 같다고 단언합니다.행수도 늘어나고 조건도 부정계로 바뀌어 가독성이 약간 떨어질 수 있지만 테스트에 실패할 때의 로그는 이해하기 쉽다.
expected: <[]> but was: <[User(id=60)]>
총결산
assertTrue
대신 assertEquals
사용하세요메모지
assertEquals
의 설치와 java.util.List#equals
의 문서를 참고하세요.Reference
이 문제에 관하여(시험에서 AllMatch식 처리를 함부로 하지 마라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sanopi/articles/eeaa162f535a9a5ac0e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)