SlideShare une entreprise Scribd logo
1  sur  57
Télécharger pour lire hors ligne
윤중현
그래서 테스트 코드는 어떻게
작성하나요?
저는 이렇게 해요!
Vivarepublica (Toss) / https://github.com/tokijh
실습에 앞서..
https://letswift.kr/2018
오늘 진행할 프로젝트
GitHub Search
오늘 진행할 프로젝트
GitHub Search
https://github.com/tokijh/LetsTest-GitHubSearch
설계
MVVM
ViewController ViewModel Service
Click Search
API Call
&
return [Repository]
Show
Repositories
Show on
TableView
Delegate
설계
RepositoryListViewController
설계
RepositoryListViewModel
설계
GitHubRepositorySearchService
동작
1. searchButtonClicked()
2. viewModel.search()
3. service.searchRepositories()
4. completion(.success(…))
5. delegate.showRepositories()
6. tableView.reload()
동작
1. searchButtonClicked()
2. viewModel.search()
3. service.searchRepositories()
4. completion(.success(…))
5. delegate.showRepositories()
6. tableView.reload()
View ViewModel Service
동작
ViewModel
•이벤트를 입력 받아
•데이터를 요청하고
•데이터를 취합해서
•데이터를 가공 후
•화면에 표시할 수 있도록 전달함
Test ViewModel
🤔
Mocking/Stubbing
내 코드를 속이다
Mocking/Stubbing
😃
내 코드를 속이다
Mocking/Stubbing
내 코드를 속이다
😦 ???
Test ViewModel
Test ViewModel
💪 💪
인터넷의 유무에 따라서 성공/실패
관심사 (의존성) 분리
실제 필요한 함수는
관심사 (의존성) 분리
Protocol
관심사 (의존성) 분리
관심사 (의존성) 분리
🤔
관심사 (의존성) 분리
RepositoryListViewModel 의 관심사 X
관심사 (의존성) 분리
😃
관심사 (의존성) 분리
GitHubRepositorySearchService() 를 필요로 하는 친구
그럼 누가 생성함?
ex
• App
• 상위 (이전) 화면
관심사 (의존성) 분리
관심사 (의존성) 분리
DI (Dependency Injection)
Test ViewModel
Test ViewModel
버그 발견!
Star 수가 이상해요!
버그 발견!
…. 😑
버그 발견!
👍
버그 재발 방지
또 같은 증상이 발생할 수는 없잖아?
😉
TDD?
star 수에 1,234 개 처럼 , 를 표시해주세요
TDD?
RED
GREEN
REFACTOR
TDD?
테스트 코드부터 작성
TDD?
로직 수정
Test View
1. searchButtonClicked()
2. viewModel.search()
3. service.searchRepositories()
4. completion(.success(…))
5. delegate.showRepositories()
6. tableView.reload()
View ViewModel Service
Test View
Test View
🤷
Test View
🙏
View 를 어떻게 속이느냐의 문제…
Test View
searchButtonClicked()
🙏
Test View
present()
🙏
Test Service
1. searchButtonClicked()
2. viewModel.search()
3. service.searchRepositories()
4. completion(.success(…))
5. delegate.showRepositories()
6. tableView.reload()
View ViewModel Service
Test Service
Test Service
Protocol
Test Service
Protocol
AppDelegateStub
여기서 방문자 수를 측정 한다면?
AppDelegateStub
여기서 방문자 수를 측정 한다면?
방문자 수 ≠ 😱
AppDelegateStub
@main
https://github.com/apple/swift-evolution/blob/main/proposals/0281-main-attribute.md
Swift 5.3 부터 지원
Like C 언어의 main 함수
AppDelegateStub
Stub
https://github.com/tokijh/Stub
Stub
https://github.com/tokijh/Stub
Testables
https://github.com/StyleShare/Testables
Testables
https://github.com/StyleShare/Testables
Testables
https://github.com/StyleShare/Testables
그래서 테스트 코드는 어떻게 작성하나요?.pdf

Contenu connexe

Tendances

Tendances (20)

React Hooks
React HooksReact Hooks
React Hooks
 
iOS Development, with Swift and XCode
iOS Development, with Swift and XCodeiOS Development, with Swift and XCode
iOS Development, with Swift and XCode
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개
 
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js +  Expres...Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js +  Expres...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
 
Svelte JS introduction
Svelte JS introductionSvelte JS introduction
Svelte JS introduction
 
Routing in NEXTJS.pdf
Routing in NEXTJS.pdfRouting in NEXTJS.pdf
Routing in NEXTJS.pdf
 
letswift22_권은빈_비전공자 개발자로 살아남기.pdf
letswift22_권은빈_비전공자 개발자로 살아남기.pdfletswift22_권은빈_비전공자 개발자로 살아남기.pdf
letswift22_권은빈_비전공자 개발자로 살아남기.pdf
 
Shields Up! Securing React Apps
Shields Up! Securing React AppsShields Up! Securing React Apps
Shields Up! Securing React Apps
 
Introduction to Google Guice
Introduction to Google GuiceIntroduction to Google Guice
Introduction to Google Guice
 
JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulation
 
Design Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIsDesign Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIs
 
Introduction Node.js
Introduction Node.jsIntroduction Node.js
Introduction Node.js
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Express js
Express jsExpress js
Express js
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
 
Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...
 
Developing RESTful Web APIs with Python, Flask and MongoDB
Developing RESTful Web APIs with Python, Flask and MongoDBDeveloping RESTful Web APIs with Python, Flask and MongoDB
Developing RESTful Web APIs with Python, Flask and MongoDB
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
React Server Side Rendering with Next.js
React Server Side Rendering with Next.jsReact Server Side Rendering with Next.js
React Server Side Rendering with Next.js
 

Similaire à 그래서 테스트 코드는 어떻게 작성하나요?.pdf

[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
우영 주
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
Jay Kim
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버
Sukjin Yun
 

Similaire à 그래서 테스트 코드는 어떻게 작성하나요?.pdf (20)

Droid knights android test @Droid Knights 2018
Droid knights android test @Droid Knights 2018Droid knights android test @Droid Knights 2018
Droid knights android test @Droid Knights 2018
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기
 
Android UI Test (Espresso/Kakao)
Android UI Test (Espresso/Kakao)Android UI Test (Espresso/Kakao)
Android UI Test (Espresso/Kakao)
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버
 
iOS 앱 개발 강의 자료 #2
iOS 앱 개발 강의 자료 #2iOS 앱 개발 강의 자료 #2
iOS 앱 개발 강의 자료 #2
 
02.개발환경 실습교재
02.개발환경 실습교재02.개발환경 실습교재
02.개발환경 실습교재
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
TEST?
TEST?TEST?
TEST?
 

Dernier

Dernier (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 

그래서 테스트 코드는 어떻게 작성하나요?.pdf