XCTest 10

UseCase와 Repository 테스트 목적 정리

UseCase와 Repository 테스트 목적 정리 해당 형태의 구조의 프로젝트에서 테스트코드를 작성하면서 학습하고 느낀점들을 정리. 글의 순서UseCase 테스트 목적Repository 테스트 목적Repository 테스트 하기SearchSubwayUseCaseTests 실패 후 로직 보완 안드로이드 공식 앱 아키텍처 가이드를 확인하면서 UseCase 영역에 해당하는 Domain이 Optional로 되어 있음을 확인할 수 있었음.개인 경험에 의하면 실제로 UseCase에서 특별한 처리 없이 사실상 래핑에만 해당하는 경우도 많긴 함. 일반적인 상황에서는 Domain Optional 이어도 나쁘지 않겠지만, 기능이 하나 둘 추가되면서 Repository가 두꺼워지고 결국은 UseCase를 분리하는 과정에..

지하철 검색 기능에 캐싱 로직 도입하기

지하철 검색 기능에 캐싱 로직 도입하기 지하철 검색 로직에 캐싱 로직을 도입. 글의 순서SearchSubwayUseCase 개선SearchSubwayUseCase 테스트를 위한 Stub 객체 만들기SearchSubwayUseCaseTests 캐싱 로직 동작 검증 코드SearchSubwayUseCaseTests 실패 후 로직 보완  지하철 검색 로직은 사용자가 키보드를 통해 검색어를 입력할 때 throttle을 활용해 약간의 시간을 두어 검색을 실행.여기까지는 우리가 일반적으로 사용하는 검색 로직. 동일한 값에 대해 서버 요청을 줄이고, 동일한 결과값을 더 빨리 제공할 수 있으므로 이점은 확실. SearchSubwayUseCase 개선기존에 Combine을 활용해서 처리하고 있었는데, cache 프로퍼티..

Test Double (Swift)

Test Double (Swift) 간단 용어 정리테스트 더블이란, doc와 동일한 API를 제공 sut (system under test): 테스트 대상 doc (depended-on component): sut이 의존하고 있는 구성요소 왜 필요할까?Solitary or Sociable?, 테스트 중인 단위가 Sociable한지 혹은 Solitary인지의 여부가 중요Sociable의 경우에 테스트하는 Unit의 결함이 아닌 의존하고 있는 클래스의 결함으로 인해 테스트가 실패하는 문제가 발생할 수 있음이러한 문제를 막기 위해 실제 동작하는 것처럼 보이는 별개의 객체를 따로 만드는 것을 고려할 수 있다.   테스트 더블의 종류 Dummy: 아무런 동작을 하지 않으며, 인스턴스화 된 객체만 필요하고, 기능까..

[XCTest] XCTest에 대해서 알아보기 1편

XCTest에 대해서 알아보기 1편  XCTest를 공식문서를 통해 정리Nimble Quick 등도 다시볼겸 정리해보자.사이드 프로젝트에서 테스트코드 작성하면서 점차 더 다양한 테스트를 시도하고 있는데, 정리가 한번 필요할 것 같았음 유닛테스트는 여러 형태로 자주 사용하고 있고,UI테스트는 아직까지 다채롭게 사용하지는 못하는 것 같은데, 자동 완성 기능이 꽤나 쏠쏠해서 특정 플로우에 QA용으로 빠르게 작성해서 테스트 용으로 사용 중임. 퍼포먼스 테스트는 해본 적은 없지만 인스트루먼트 보면서 그냥 거기서 hang걸리거나 부족한 부분 없는지 체크중인데, 성능 최적화 부분에 대해서 컴파일러 최적화 등에 의존하지 않고, 직접 사용하고자 할 경우 특정 핫스팟을 발견해서 작성이 필요하다고는 알고 있음.  ✅ 공식문..

XCTest Stubber

XCTest Stubber테스트코드를 작성하는데 Stubber라는게 있대서 알아보고자 함.  오픈소스 링크https://github.com/devxoul/Stubber GitHub - devxoul/Stubber: A minimal method stub for SwiftA minimal method stub for Swift. Contribute to devxoul/Stubber development by creating an account on GitHub.github.com  배경 네트워크 상황과 관련한 코드를 작성하고 있는데, 이를 활용해 테스트 환경을 더 손쉽게 구축하여 본질에 집중하고자 함.테스트 코드를 작성하면서 네트워크 상에서는 너무 변수가 많은데 이를 하나하나 다 가정하고 테스트 코드를 ..

[XCTest] RxTest 와 RxBlocking에 대해서 알아보자

RxTest / RxBlocking ✅ 테스트에 대해서 알아보자. Rx... 얘내 도대체 어떻게 테스트할까 고민 많이 했었는데, 이런 도구들이 있다니! 여담이지만 이런거 Kuring프로젝트 하시는 분의 테스트코드 보는데 약간 치임;; Swift에서 제공하는 것만으로도 충분하다고 생각했는데 굳이 Rx를 하는게 도움이 클까?? 생각도 들지만 아무튼 공부해보자 (UIButton의 rx.tap 못쓴다고 생각하니 공부해야겠ㄷ.ㅏ) 🟠 RxTest란? Observable의 가상의 시간 개념을 주입해서 테스트하는 방법으로 가상의 시간이 다 흐를때까지 기다린 후에 이벤트를 반환할 수 있어. 각 초에 문자하나 방출한다고 가정 1초 -> "A" 2초 -> "B" 3초 -> "C" // 2sec에 B가 나왔는지 검증 ✅ R..

[XCTest] Quick 과 Nimble에 대해서 알아보자.

Quick / Nimble ✅ Quick / Nimble에 대해서 알아보자. 이번에 XCTest를 공부하다가 Quick과 Nimble이라는게 있어서 한번 다시 공부해보도록 하자. https://github.com/Quick/Nimble GitHub - Quick/Nimble: A Matcher Framework for Swift and Objective-C A Matcher Framework for Swift and Objective-C. Contribute to Quick/Nimble development by creating an account on GitHub. github.com https://github.com/Quick/Quick/tree/main/Documentation/ko-kr GitHu..

Showing All Messages Undefined symbol: __swift_FORCE_LOAD_$_XCTestSwiftSupport

Showing All Messages Undefined symbol: __swift_FORCE_LOAD_$_XCTestSwiftSupport 카카오 맵 API를 사용하려고 하는데 에러가 발생함아직 초보자라서 framework, libraray 등 관련 오류가 터질때마다 해결하는데 시간이 너무 오래 걸린다 ㅠㅠ product 타겟에 오류 원인처럼 XCTests를 넣어주면 오류를 1차적으로 제거할 수 있으나 올바른 처리 방법은 아님.근데 가만히 생각해니까 테스트 프레임워크가 들어가는게 이상한거 같음.프로덕트 타겟에서 테스트 타겟으로 가야하는 부분들을 완전히 제거해 줌.  그냥 찾아보다가 rpath 관련해서 다른 오류도 있어서 하나 더 작성해 봄.  rpath도 환경 관련 이라는데 코코아팟에서 처리가능한 것..

[XCTest] 🧑🏻‍💻 Xcode 기존 프로젝트에 XCTest 작성 파일 추가하기!

✅ 에러에 대해서 알아보자. 🟠 Library not loaded: @rpath/XCTest.framework/XCTest Xcode 파일을 만들 때, test를 include하지 않고 만들었다가 이후에 테스트를 해야해서 테스트 코드 파일을 만들고 돌리는데, 앱이 죽어버리는 상황이 발생. 그래서 로그 훑어 보니까 저런 에러라 어떻게 할까 찾아봄. ✅ [해결법] 결국은 기존 프로젝트에 테스트 코드 작성을 위한 파일을 만들어야 하는데 아래의 사진처럼 저 버튼을 클릭하고 저기 하단에 플러스 모양을 클릭 그럼 그 플러스 모양에 막 이렇게 뜰탠데, 여기에 Unit Test 랑 UI Test를 선택할 수 있음 Target이라고 써져있는 파일 선택하고 내 프로젝트 파일을 보면 테스트 파일이 만들어진 것을 확인할 수 ..

part5. (ch5) XCTest

✅ 테스트를 하는 이유? - 개발자가 작성한 코드가 의도한대로 작동하는지 확인하는 과정 - UI 표시 - UI Layout 설정 - API Request - UserDefault 저장 / 가져오기 - 등등 ✅ 테스트의 종류 - Unit Test : 특정 함수, 메소드의 동작에 대한 테스트 - UI Test : UI 표시 or UI Action에 대한 테스트 ✅ 테스트 코드 파일을 간단히 알아보자! ✅ 하지만..! 테스트를 많이 진행했다고 좋은 테스트라고 말할 수 있을까? - Test Coverage: Xcode Project에서 몇%의 코드에 대해서 테스트가 작성되어 있는지 나타낸 숫자 - Test Coverage의 사용: App의 안정성을 확인하는 기준 ✅ 그렇다면 Coverage를 어떻게 확인할까? ..