apple/Testing, Xcode, Environment 12

iOS SnapshotTesting (스냅샷 테스팅)

iOS SnapshotTesting (스냅샷 테스팅) 오픈소스를 활용해서 스냅샷 테스트를 연습해보고자 함. 목차스냅샷 테스트란?오픈소스 설치하기테스트 코드 작성하기성공한 스냅샷 확인만약에 View의 배경색을 바꾼다면? 예제 파일오픈소스https://github.com/pointfreeco/swift-snapshot-testing 스냅샷 테스트란?스냅샷 테스트는 특정 시점에서의 스냅샷을 저장하고, 이후 변경이 발생했을 때 이를 비교하여 문제를 발견할 수 있음UI 요소(View, ViewController)데이터 구조(JSON, 문자열 등)파일(이미지, 텍스트, PDF 등)스냅샷 테스트는 파일로 저장되어 git 버전 관리를 활용해 변경 내용을 추적할 수 있음.swift-snapshot-testing은 UI와..

언어의 기본 자료형 Dummy를 활용해 더 명확한 테스트 작성하기

언어의 기본 자료형 Dummy를 활용해 더 명확한 테스트 작성하기 테스트 코드를 작성하면서 언어에서 제공하는 기본 값을 그대로 사용하는 경우해당 값이 테스트에 영향을 주는 값인지혹은 단순히 기본값인지 다른 개발자가 판단하기 어려운 경우가 많음.이는 결국 가독성과 유지보수에 문제를 일으킬 수도 있음. 목차Swift의 기본 자료형을 Dummy 대신 사용한 테스트 코드를 마주한 경우Model 과 ViewModel의 구현체 확인테스트 코드에 Dummy 값을 명시적으로 사용한 경우 Swift의 기본 자료형을 Dummy 대신 사용한 테스트 코드를 마주한 경우아래처럼 테스트코드가 작성되어 있다면, 테스트가 올바르게 작성되었다고 생각하기보다 코드를 볼수록 많는 의문점들이 생겨남많은 의문점들은 테스트 본질이 아닌 부..

UseCase와 Repository를 테스트하면서 느낀 점.

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

[Tuist] Mise Install

[Tuist] Mise InstallTuist 3점대에서 4점대로 바꾸려고 Tuist 문서에 들어가니까 Mise를 추천한다고 되어 있어서 학습하고자 함.사실상 에러 해결의 과정에 가까움. Tuist 3점대 사용하고 있었다면, 설치 해제부터 시작하기.tuist uninstalled Mise는 아래 공식 문서에 따라 학습 https://mise.jdx.dev/getting-started.htmlGetting Started | mise-en-placemise.jdx.dev 1. mise 설치curl https://mise.run | sh~/.local/bin/mise --versionmise 2024.x.x mise CLI를 설치하고 mise 버전 확인 2. Active mise & Alternat..

EnableSwiftBuildSystemIntegration

EnableSwiftBuildSystemIntegration빌드 시스템과 Swift 컴파일러에는 사용 가능한 코어를 더 잘 활용하는 새로운 모드가 존재.아래의 옵션을 활성화 할 경우 Swift 프로젝트의 빌드 속도가 더 빨라지며, 이 모드는 옵트인 모드.  https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-13_3-release-notes#Build-System  Xcode 13.3 Release Notes | Apple Developer DocumentationUpdate your apps to use new features, and test your apps against API changes.developer.apple.com

[Xcode] Instruments - Network

[Xcode] Instruments - Network 내가 사용하는 앱이 네트워크 통신에 있어서 어떤 Request와 Response를 처리하는지 체크하기 위해서 이 방법을 사용할 수 있음. 1. Xcode의 좌측의 이미지에서 삼각형 버튼을 꾹 누르면 우측의 메뉴팝업이 나타나고 오른쪽 이미지와 같이 변경2. Network를 선택 3. 기록을 실행기록하면 타임라인에 따라 결과가 나타남. 4. 내가 확인하고자 하는 부분을 선택 - 이미지 좌측 상단에 List: HTTP Transaction으로 설정한 화면 5. 응답과 결과 확인 직접 사용하면서 자세한 것들은 보기

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도 어느순간부터 관성적으로 사용하고 있는데 이것들도 한번 같이 학습해보자.사이드 프로젝트에서 테스트코드 작성하면서 점차 더 다양한 시나리오, 동작 플로우, 알고리즘 등에 대해서 더 세분화해서 테스트를 진행하는데 전에 정리 통한 복기가 필요하다고 느낌.기존에도 유닛테스트는 자주 사용하고 있어서 익숙한데, UITest는 거의 사용하지 않고 있음.스냅샷테스트 등이 있다고는 들었는데, 이렇게 사용하기 보다, Record 통해서 QA나 기획에서 이런 동작에 문제 없는지 확인 요청 왔을 때 코드 변경 후 테스트 위해서 사용 종종함. 서비스 개발에서 퍼포먼스 테스트는 해본 적은 없는데, 종종 깃허브 돌아다니면서 관련해서 ..

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  배경 네트워크 상황과 관련한 코드를 작성하고 있는데, 이를 활용해 테스트 환경을 더 손쉽게 구축하여 본질에 집중하고자 함.테스트 코드를 작성하면서 네트워크 상에서는 너무 변수가 많은데 이를 하나하나 다 가정하고 테스트 코드를 ..

RxTest 와 RxBlocking 알아보기 (XCTest)

RxTest 와 RxBlocking 알아보기 (XCTest) RxSwift를 도입하고 기존 클로저 기반으로 작성되었던 코드를 리팩토링하면서기존에 작성된 테스트 코드도 Rx 기반으로 변경이 필요한데 이를 학습해보고자 함. RxSwift를 도입하면서 어떻게 테스트할지 고민이었는데 해당 내용을 통해 개념 정리 RxTest란? RxTest는 RxSwift Unit Test를 작성하기 위한 테스트 유틸리티 라이브러리.RxSwift는 비동기적이고 스트림 기반으로 동작하기 때문에, 단순히 값 비교로는 테스트하기 어려움.RxTest는 가상의 시간(Time) 과 이벤트 기록(Recorded Event) 개념을 도입해 Observable의 동작을 예측 가능하고 재현 가능한 형태로 검증할 수 있게 도움. Observable..