{"id":27381299,"url":"https://github.com/overult01/junit_springboot_2","last_synced_at":"2026-04-24T23:34:56.600Z","repository":{"id":117856782,"uuid":"493898212","full_name":"overult01/junit_springboot_2","owner":"overult01","description":"도서 '자바와 JUnit을 활용한 실용주의 단위 테스트'를 참고하며 실습한 내용입니다.","archived":false,"fork":false,"pushed_at":"2022-05-19T16:35:09.000Z","size":10663,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-05T14:02:47.606Z","etag":null,"topics":["junit","junit4","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/overult01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-19T02:49:59.000Z","updated_at":"2023-03-04T02:19:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"72c54c5a-94b5-4cec-a07b-e9a3319f26cf","html_url":"https://github.com/overult01/junit_springboot_2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/overult01/junit_springboot_2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overult01%2Fjunit_springboot_2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overult01%2Fjunit_springboot_2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overult01%2Fjunit_springboot_2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overult01%2Fjunit_springboot_2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/overult01","download_url":"https://codeload.github.com/overult01/junit_springboot_2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overult01%2Fjunit_springboot_2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32245150,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["junit","junit4","spring"],"created_at":"2025-04-13T14:47:42.608Z","updated_at":"2026-04-24T23:34:56.593Z","avatar_url":"https://github.com/overult01.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# junit_springboot_2\n- 도서 '자바와 JUnit을 활용한 실용주의 단위 테스트(길벗, 2019)'을 토대로 실습하며, 학습 내용중 일부를 블로그에 정리하였습니다.\n- 자바 8, JUnit4\n\n\n## 개요\n- ch01: JUnit4 시작\n  + [준비-실행-단언(AAA)](https://structuring.tistory.com/198)\n\n- ch02: @before\n  + @before: 각 JUnit 테스트 진행시 필요한 공통적인 초기화 담당 (가독성 향상) \n \n- ch03: 단언(Assert)\n  + 3.1.1 단언(어떤 조건이 참인지 검증하는 방법) 종류 2가지\n    + 1) assertTrue: 가장 일반적 단언. 전통적. JUnit 내.\n    + 2) assertThat: 햄크레스트 단언. 명확한 값을 비교. 주사용.\n  + 3.1.2 햄크레스트의 중요 매처들 확인하기: is, not 장식자 \n  + 3.1.3 closeTo: 부동소수점 2개를 비교\n  + 3.1.4 단언 설명\n  + 3.2.1 예외를 기대하는 3가지방법\n    + 1) @test 사용 \n    + 2) try/catch, fail \n    + 3) ExpectedException 규칙\n  + 3.2.2 예외 무시: throws\n\n- ch04: 테스트 조직\n  + 4.1 [AAA로 테스트 일관성 유지](https://structuring.tistory.com/198)\n  + 4.2 동작 테스트 vs 메서드 테스트\n  : 개별 메서드를 테스트하는 것이 아니라, 클래스의 종합적인 동작을 테스트해야 한다.\n  + 4.3 테스트와 프로덕션 코드(테스트 대상)의 관계\n  : 일방향(테스트 코드는 프로덕션 코드에 의존한다. 그 반대는 존재를 몰라 의존하지x)\n  + 4.3.1 테스트와 프로덕션 코드 분리(최소 3가지 방법 존재)\n  : 보통 테스트 코드를 별도 디렉터리로 분리 but 프로덕션 코드와 동일 패키지에 삽입한다. test 디렉터리 구조는 src 디렉터리를 반영하여, 동일 패키지를 가진다.\n  + 4.3.2 내부 데이터 노출 vs 내부 동작 노출\n  + 4.4 집중적인 단일 목적 테스트의 가치\n  + 4.5 문서로서의 테스트\n  + 4.5.1 일관성 있는 이름으로 테스트 문서화\n  + 4.5.2 테스트를 의미 있게 만들기\n  + 4.6 @Before와 @After (공통 초기화와 정리) 더 알기\n  + 4.6.1 BeforeClass와 AfterClass 애너테이션\n  + 4.7 녹색이 좋다: 테스트를 의미 있게 유지\n  + 4.7.1 테스트를 빠르게\n  + 4.7.2 테스트 제외\n\n \n---------------\n2부 빠른 암기법 습득\n\n \n\n5장 좋은 테스트의 FIRST 속성\n\n5.1 FIRST: 좋은 테스트 조건\n\n5.2 [F]IRST: 빠르다\n\n5.3 F[I]RST: 고립시킨다\n\n5.4 FI[R]ST: 좋은 테스트는 반복 가능해야 한다\n\n5.5 FIR[S]T: 스스로 검증 가능하다\n\n5.6 FIRS[T]: 적시에 사용한다\n\n5.7 마치며\n\n \n\n6장 Right-BICEP: 무엇을 테스트할 것인가?\n\n6.1 [Right]-BICEP: 결과가 올바른가?\n\n6.2 Right-[B]ICEP: 경계 조건은 맞는가?\n\n6.3 경계 조건에서는 CORRECT를 기억하라\n\n6.4 Right-B[I]CEP: 역 관계를 검사할 수 있는가?\n\n6.5 Right-BI[C]EP: 다른 수단을 활용하여 교차 검사할 수 있는가?\n\n6.6 Right-BIC[E]P: 오류 조건을 강제로 일어나게 할 수 있는가?\n\n6.7 Right-BICE[P]: 성능 조건은 기준에 부합하는가?\n\n6.8 마치며\n\n \n\n7장 경계 조건: CORRECT 기억법\n\n7.1 [C]ORRECT: [C]onformance(준수)\n\n7.2 C[O]RRECT: [O]rdering(순서)\n\n7.3 CO[R]RECT: [R]ange(범위)\n\n__7.3.1 불변성을 검사하는 사용자 정의 매처 생성\n\n__7.3.2 불변 메서드를 내장하여 범위 테스트\n\n7.4 COR[R]ECT: [R]eference(참조)\n\n7.5 CORR[E]CT: [E]xistence(존재)\n\n7.6 CORRE[C]T: [C]ardinality(기수)\n\n7.7 CORREC[T]: [T]ime(시간)\n\n7.8 마치며\n\n \n\n3부 더 큰 설계 그림\n\n \n\n8장 깔끔한 코드로 리팩토링하기\n\n8.1 작은 리팩토링\n\n__8.1.1 리팩토링의 기회\n\n__8.1.2 메서드 추출: 두 번째로 중요한 리팩토링 친구\n\n8.2 메서드를 위한 더 좋은 집 찾기\n\n8.3 자동 및 수동 리팩토링\n\n8.4 과한 리팩토링?\n\n__8.4.1 보상: 명확하고 테스트 가능한 단위들\n\n__8.4.2 성능 염려: 그러지 않아도 된다\n\n8.5 마치며\n\n \n\n9장 더 큰 설계 문제\n\n9.1 Profile 클래스와 SRP\n\n9.2 새로운 클래스 추출\n\n9.3 명령-질의 분리\n\n9.4 단위 테스트의 유지 보수 비용\n\n__9.4.1 자신을 보호하는 방법\n\n__9.4.2 깨진 테스트 고치기\n\n9.5 다른 설계에 관한 생각들\n\n9.6 마치며\n\n \n\n10장 목 객체 사용\n\n10.1 테스트 도전 과제\n\n10.2 번거로운 동작을 스텁으로 대체\n\n10.3 테스트를 지원하기 위한 설계 변경\n\n10.4 스텁에 지능 더하기: 인자 검증\n\n10.5 목 도구를 사용하여 테스트 단순화\n\n10.6 마지막 하나의 단순화: 주입 도구 소개\n\n10.7 목을 올바르게 사용할 때 중요한 것\n\n10.8 마치며\n\n \n\n11장 테스트 리팩토링\n\n11.1 이해 검색\n\n11.2 테스트 냄새: 불필요한 테스트 코드\n\n11.3 테스트 냄새: 추상화 누락\n\n11.4 테스트 냄새: 부적절한 정보\n\n11.5 테스트 냄새: 부푼 생성\n\n11.6 테스트 냄새: 다수의 단언\n\n11.7 테스트 냄새: 테스트와 무관한 세부 사항들\n\n11.8 테스트 냄새: 잘못된 조직\n\n11.9 테스트 냄새: 암시적 의미\n\n11.10 새로운 테스트 추가\n\n11.11 마치며\n\n \n\n4부 더 큰 단위 테스트 그림\n\n \n\n12장 테스트 주도 개발\n\n12.1 TDD의 주된 이익\n\n12.2 단순하게 시작\n\n12.3 또 다른 증분 추가\n\n12.4 테스트 정리\n\n12.5 또 다른 작은 증분\n\n12.6 다수의 응답 지원: 작은 설계 우회로\n\n12.7 인터페이스 확장\n\n12.8 마지막 테스트들\n\n12.9 문서로서의 테스트\n\n12.10 TDD의 리듬\n\n12.11 마치며\n\n \n\n13장 까다로운 테스트\n\n13.1 멀티스레드 코드 테스트\n\n__13.1.1 단순하고 똑똑하게 유지\n\n__13.1.2 모든 매칭 찾기\n\n__13.1.3 애플리케이션 로직 추출\n\n__13.1.4 스레드 로직의 테스트 지원을 위해 재설계\n\n__13.1.5 스레드 로직을 위한 테스트 작성\n\n13.2 데이터베이스 테스트\n\n__13.2.1 고마워, Controller\n\n__13.2.2 데이터 문제\n\n__13.2.3 클린 룸 데이터베이스 테스트\n\n__13.2.4 controller를 목 처리\n\n13.3 마치며\n\n \n\n14장 프로젝트에서 테스트\n\n14.1 빠른 도입\n\n14.2 팀과 같은 편 되기\n\n__14.2.1 단위 테스트 표준 만들기\n\n__14.2.2 리뷰로 표준 준수 높이기\n\n__14.2.3 짝 프로그래밍을 이용한 리뷰\n\n14.3 지속적 통합으로 수렴\n\n14.4 코드 커버리지\n\n__14.4.1 커버리지는 어느 정도여야 하는가?\n\n__14.4.2 100% 커버리지는 진짜 좋은가?\n\n__14.4.3 코드 커버리지의 가치\n\n14.5 마치며\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverult01%2Fjunit_springboot_2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foverult01%2Fjunit_springboot_2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverult01%2Fjunit_springboot_2/lists"}