단위 테스트의 기술 : 견고하고 신뢰할 수 있는 코드를 만드는 단위 테스트 작성법
Description
기본 개념과 실전 예제, 리팩터링, 유지 보수성 향상, 조직 내 테스트 도입까지
한 권으로 끝내는 단위 테스트 완벽 가이드
이 책의 최종 목표는 더 견고한 코드를 작성하고 싶은 모든 개발자가 단위 테스트의 정수를 제대로 배우고 모범 사례를 활용하도록 하는 것이다. 이 책은 크게 네 부분으로 나뉘어 있다. 1부에서는 단위 테스트 작성에 대한 기본기를 다진다. 테스트 프레임워크인 제스트 사용법과 함께 테스트 러너, 검증문, 테스트 방식 등을 배운다. 2부에서는 의존성을 끊는 고급 기술을 다룬다. 목, 스텁, 격리 프레임워크와 함께 코드를 리팩터링하는 방법을 배운다. 3부에서는 다양한 모범 사례를 배운다. 구성 방법, 리팩터링 패턴, 테스트 작성 등을 모두 다룬다. 4부에서는 실무 노하우를 배운다. 조직 내에 변화를 만들기 위해 단위 테스트를 도입하는 방법부터 문제점 해결, 레거시 코드를 제거하는 법까지 다양한 실무 지식을 얻을 수 있다. 꼭 배워야 할 개념들만 담은 이 책으로 단위 테스트에 입문하고 실무에도 바로 적용해 보자.

저자

로이오셔로브,블라디미르코리코프

저자:로이오셔로브
로이오셔로브는초기ALT.NET커뮤니티를이끌었던멤버중한명으로,이전에는Typemock에서수석아키텍트로근무했다.그는전세계를누비며단위테스트와TDD에대해컨설팅하고교육하며,5whys.com을통해팀의리더가더나은리더십을발휘할수있도록교육하고있다.X에서는@RoyOsherove로활동하고있으며,ArtOfUnitTesting.com에서는단위테스트와관련한다양한영상을제공하고있다.강연및교육은Osherove.com에서신청할수있다.

저자:블라디미르코리코프
블라디미르코리코프는마이크로소프트MVP이자블로거이며,Pluralsight의강사로활동중이다.10년이상소프트웨어개발에종사하며,단위테스트의노하우를여러팀에전수해왔다.『단위테스트』(에이콘출판사,2021)의저자이며,단위테스트와관련된인기블로그시리즈와온라인교육과정을다수집필했다.블라디미르코리코프의강의스타일의가장큰장점은이론적배경을실전예제에잘적용한다는점으로,많은학생이이를극찬하였다.그의블로그는EnterpriseCraftsmanship.com에서확인할수있다.

역자:양문규
컴퓨터공학과를졸업하고2017년에웹프런트엔드개발자로커리어를시작했다.누구나선택하는길을걷는것이진정으로나의길일지를고민하면서2018년에겨우졸업장을받았다.다행히도그때의패기와자신감이오만함으로이어지지않았다는걸어린개발자시절에깨달았다.훌륭한선배,후배,동료들과많은가르침과조언을주고받으며나도좋은영향을주는개발자가되고싶다는생각을하게됐다.블로그를운영하며개발을잘하는것과잘설명하는것은다르다는걸알게되었고,요즘은다른사람의생각을알아가는게즐겁다.최근에가장많이하는말은,“내가할수있다면당신도할수있다”이다.

목차


1부시작하기

1장단위테스트의기초
1.1누구에게나처음은있다
1.2단위테스트정의
1.3진입점과종료점
1.4종료점유형
1.5다른종료점,다른기법
1.6처음부터테스트코드작성
1.7좋은단위테스트의특징
__1.7.1좋은단위테스트란
__1.7.2단위테스트체크리스트
1.8통합테스트
1.9최종정리
1.10테스트주도개발
__1.10.1TDD는단위테스트의대체제가아니다
__1.10.2TDD를잘하는세가지핵심기법
1.11요약

2장첫번째단위테스트
2.1제스트소개
__2.1.1환경설정
__2.1.2실습폴더생성
__2.1.3제스트설치
__2.1.4테스트파일생성
__2.1.5제스트실행
2.2라이브러리,검증,러너,리포터
2.3단위테스트프레임워크가제공하는기능
__2.3.1xUnit프레임워크
__2.3.2xUnit,TAP,제스트구조
2.4앞으로이책에서주로다루는예제:비밀번호검증프로젝트
2.5verifyPassword()함수의첫번째테스트코드
__2.5.1준비-실행-검증패턴
__2.5.2테스트코드테스트
__2.5.3USE전략
__2.5.4문자열비교와유지보수성
__2.5.5describe()함수로구역나누기
__2.5.6코드구조로알수있는테스트정보
__2.5.7it()함수
__2.5.8두가지제스트스타일
__2.5.9verifyPassword()함수리팩터링
2.6beforeEach()함수사용
__2.6.1beforeEach()함수와스크롤피로감
2.7팩토리함수사용
__2.7.1팩토리함수로beforeEach()함수완전히대체
2.8다시test()함수로돌아가기
2.9다양한입력값을받는테스트리팩터링
2.10예정된오류가발생하는지확인
2.11테스트카테고리설정
2.12요약

2부핵심기술

3장의존성분리와스텁
3.1의존성유형
3.2스텁을사용하는이유
3.3스텁을사용하는일반적인설계방식
__3.3.1스텁으로만든시간을매개변수로주입
__3.3.2의존성,주입,제어
3.4함수를이용한주입방법
__3.4.1함수주입
__3.4.2부분적용을이용한의존성주입
3.5모듈을이용한주입방법
3.6생성자함수를사용하여객체지향적으로전환
3.7객체지향적으로의존성을주입하는방법
__3.7.1생성자주입
__3.7.2함수대신객체주입
__3.7.3공통인터페이스추출
3.8요약

4장모의객체를사용한상호작용테스트
4.1상호작용테스트,목,스텁
4.2로거함수에의존
4.3기본스타일:매개변수를주입하는방식으로리팩터링
4.4목과스텁을구분하는것의중요성
4.5모듈스타일의목
__4.5.1실제예제코드
__4.5.2모듈주입방식으로코드리팩터링
__4.5.3모듈주입방식을이용한테스트예제
4.6함수형스타일에서목
__4.6.1커링스타일사용
__4.6.2커링없이고차함수사용
4.7객체지향스타일의목
__4.7.1의존성주입을위한코드리팩터링
__4.7.2인터페이스주입을이용한코드리팩터링
4.8복잡한인터페이스다루기
__4.8.1복잡한인터페이스예
__4.8.2복잡한인터페이스를사용하여테스트작성
__4.8.3복잡한인터페이스를직접사용할때단점
__4.8.4인터페이스분리원칙
4.9부분모의객체
__4.9.1부분모의객체를함수형방식으로풀어보기
__4.9.2부분모의객체를객체지향방식으로풀어보기
4.10요약

5장격리프레임워크
5.1격리프레임워크정의
__5.1.1선택하기:느슨한타입대정적타입
5.2동적으로가짜모듈만들기
__5.2.1제스트API에대해알아둘점
__5.2.2직접의존성의추상화고민
5.3함수형스타일의동적목과스텁
5.4객체지향스타일의동적목과스텁
__5.4.1느슨한타입의프레임워크사용
__5.4.2타입스크립트에적합한프레임워크로전환
5.5동적스텁설정
__5.5.1목과스텁을사용한객제지향예제
__5.5.2substitute.js를사용한스텁과목
5.6격리프레임워크의장점과함정
__5.6.1대부분의경우모의객체가필요하지않다
__5.6.2읽기어려운테스트코드
__5.6.3잘못된대상검증
__5.6.4테스트당하나이상목을사용
__5.6.5테스트의과도한명세화
5.7요약

6장비동기코드단위테스트
6.1비동기데이터가져오기
__6.1.1통합테스트를이용한첫시도
__6.1.2작업기다리기
__6.1.3async/await를사용하는통합테스트
__6.1.4통합테스트의어려움
6.2코드를단위테스트에적합하게만들기
__6.2.1진입점분리패턴
__6.2.2어댑터분리패턴
6.3타이머다루기
__6.3.1몽키패칭으로타이머를스텁으로만들기
__6.3.2제스트로setTimeout대체
6.4일반적인이벤트처리
__6.4.1이벤트이미터
__6.4.2클릭이벤트처리237
6.5DOM테스트라이브러리도입240
6.6요약241

3부테스트코드

7장신뢰할수있는테스트
7.1테스트를신뢰할수있는지판단하는방법
7.2테스트가실패하는이유
__7.2.1프로덕션코드에서실제버그가발견된경우
__7.2.2테스트가거짓실패를일으키는경우
__7.2.3기능변경으로테스트가최신상태가아닌경우
__7.2.4테스트가다른테스트와충돌하는경우
__7.2.5테스트가불안정한경우
7.3단위테스트에서불필요한로직제거
__7.3.1Assert문에서로직:동적기댓값생성
__7.3.2다른형태의로직255
__7.3.3로직이더많이포함된경우
7.4테스트가통과하더라도끝이아니다
__7.4.1검증부분이없는경우
__7.4.2테스트를이해할수없는경우
__7.4.3단위테스트가불안정한통합테스트와섞여있는경우
__7.4.4테스트가여러가지를한꺼번에검증하는경우
__7.4.5테스트가자주변경되는경우
7.5불안정한테스트다루기
__7.5.1불안정한테스트를발견했을때할수있는일
__7.5.2상위수준의테스트에서안전성을유지하는방법
7.6요약

8장유지보수성
8.1테스트실패로코드변경
__8.1.1테스트가관련이없거나다른테스트와충돌하는경우
__8.1.2프로덕션코드의API변경
__8.1.3다른테스트가변경되었을경우
8.2유지보수성을높이는리팩터링방법
__8.2.1private또는protected메서드사용하지않기
__8.2.2테스트에서도DRY원칙고수
__8.2.3초기화함수를사용하지않기
__8.2.4매개변수화된테스트로중복코드제거
8.3과잉명세된테스트
__8.3.1목을사용한내부동작과잉명세
__8.3.2결과와순서를지나치게세밀하게검증
8.4요약

4부디자인과프로세스

9장가독성
9.1단위테스트이름짓기
9.2매직넘버와변수이름
9.3검증과실행단계분리
9.4초기화및설정해제
9.5요약

10장더나은테스트전략수립
10.1일반적인테스트유형과수준
__10.1.1테스트평가기준
__10.1.2단위테스트와컴포넌트테스트
__10.1.3통합테스트
__10.1.4API테스트
__10.1.5E2E/UI격리테스트
__10.1.6E2E/UI시스템테스트
10.2각테스트수준마다존재하는안티패턴
__10.2.1E2E테스트만사용하는안티패턴
__10.2.2저수준테스트만사용하는안티패턴
__10.2.3저수준테스트와고수준테스트의단절
10.3테스트레시피전략
__10.3.1테스트레시피작성방법
__10.3.2언제테스트레시피를사용해야할까?
__10.3.3테스트레시피작성규칙
10.4배포파이프라인관리
__10.4.1배포파이프라인대탐색파이프라인
__10.4.2테스트계층병렬화
10.5요약

11장조직내단위테스트도입
11.1변화의바람을일으키는과정
__11.1.1까다로운질문에대비
__11.1.2내부설득:변화에찬성하는사람과반대하는사람
__11.1.3변화의시작점을찾아라
11.2성공으로가는길
__11.2.1게릴라방식:상향식
__11.2.2경영진설득하기:하향식
__11.2.3실험을이용한기회창출
__11.2.4외부전문가에게도움받기
__11.2.5진행상황가시화
__11.2.6구체적인목표,성과지표,KPI설정
__11.2.7길위의돌부리
11.3실패로가는길
__11.3.1추진력부족
__11.3.2내부지원부족
__11.3.3임시구현과첫인상
__11.3.4팀원이협조적이지않을때
11.4변화에영향을미치는요인
11.5까다로운질문과답변
__11.5.1단위테스트가현재프로세스에서얼마나많은시간을차지할까?
__11.5.2단위테스트때문에QA업무가사라질까?
__11.5.3단위테스트가정말로도움이된다는증거가있을까?
__11.5.4테스트가있음에도왜여전히QA를진행하면버그가발견될까?
__11.5.5테스트없는코드가너무많은데어디부터시작해야할까?
__11.5.6소프트웨어와하드웨어를함께개발할때는어떻게해야할까?
11.5.7테스트자체에버그가없다는것을어떻게확인할수있을까?
11.5.8디버거로코드가잘작동하는것을확인했는데,왜테스트가필요할까?
11.5.9TDD는어떻게받아들여야할까?
11.6요약

12장레거시코드다루기
12.1어디에서부터테스트를시작해야할까?
12.2무엇을선택할지결정
__12.2.1쉬운것부터시작했을때장단점
__12.2.2어려운것부터시작했을때장단점
12.3리팩터링전에통합테스트작성
__12.3.1마이클페더스도서참고
__12.3.2CodeScene을사용하여프로덕션코드분석
12.4요약

부록A함수와모듈의몽키패칭
A.1알아두어야할점
A.2함수와전역변수의몽키패칭과그에따른잠재적문제
__A.2.1제스트를사용한몽키패칭
__A.2.2제스트sp

출판사 서평

기본개념부터지금바로적용가능한다양한전략까지,
단위테스트의모든것을알아보자!

단위테스트로더나은코드를만들자

단위테스트는단순한버그를탐지하는수단이아니다.테스트는코드의신뢰성을보장하고,유지보수를쉽게하며,더나은설계를이끄는가장강력한방법이다.『단위테스트의기술』은초보개발자부터중급개발자까지누구나쉽게따라할수있는테스트작성법을제공한다.1부에서는테스트작성을위한기본기를다지고,2부에서는의존성분리,모의객체,스텁과같은핵심기술을다룬다.3부에서는코드의유지보수성을높이는방법에집중하며,4부에서는조직내테스트도입전략수립부터레거시코드까지를다룬다.특히코드의신뢰성,유지보수성,가독성을각각독립된주제로확장하여자세히알려주고있다.이책으로견고한테스트설계로버그를줄이고,코드의품질을높이는실력있는개발자로성장해보자.

실무에바로적용할수있는다양한노하우를가득담았다

이책은개발자가현업에서마주하는다양한실무적문제를해결하는데도움을준다.책에서는단순한기초개념에머물지않고격리프레임워크,비동기코드테스트,테스트전략수립등의고급주제까지심도있게다루고있다.실전예제와함께Jest와같은테스트프레임워크를사용한코드작성법을차근차근익히며,테스트리팩터링과유지보수성향상기법까지배울수있다.또한부록과역자노트를통해테스트환경구축과실전경험을추가로공유하고있어,테스트를실무에도입하고자하는개발자에게유용한조언을제공한다.실무에서필요한단위테스트의모든노하우가이책에담겨있기때문에지금당장써먹을수있는다양한전략을찾아볼수있을것이다.