시험에서 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.)