XCTest 11

Swift Testing으로 테스트 심화하기 (Go further with Swift Testing) - WWDC24

Swift Testing으로 테스트 심화하기 (Go further with Swift Testing) - WWDC24 코드가 복잡해질수록 테스트를 읽고 이해하기 쉽도록 만드는 것이 더욱 중요모든 엣지 케이스를 방어하기 위해 코드 커버리지를 적당히 유지그룹으로 잘 관리하는것이 어려움.테스트 사이에 숨겨진 종속성으로 인해 테스트가 취약해짐. 테스트는 일반적으로 완벽하기보단 덜 작성되는게 많지만, 잘못된 입력과 예상치 못한 조건을 마주친 경우에도 테스트가 깔끔하게 실패하게 해야함. 이렇게 코드를 작성한 경우에는 try 구문에서 테스트가 실패함.만약 함수가 성공적으로 실행될 경우 expect에서 값을 확인할 수 있음. 반면에 테스트 실패 케이스가 의도대로 실패하는지 확인하려면 do - catch 문을 확인..

apple/WWDC 2025.06.29

Meet Swift Testing - WWDC24

Meet Swift Testing - WWDC24 뛰어난 사용자 경험을 제공하려면 품질과 안전성이 매우 중요. Swift Testing은 새로운 오픈소스 패키지로 Swift 동시성 및 매크로 같은 최신 기능을 도입함.Linux와 Windows 등 모든 주요 플랫폼을 지원함. @Test가 Swift Testing에서 함수가 테스트임을 나타냄.async or throws를 사용할 수 있으며 경우에 따라서 Actor로 격리 가능함. #expect는 매크로로 일반 표현식과 언어 연산자를 허용함.테스트가 실패할 경우에는 코드와 표현식에 대한 값을 캡처함. 테스트가 실패한 경우 #expect에 전달된 표현식에 대한 세부 정보가 하위 값과 함께 표시됨. #expect는 매우 유연해서 연산을 수행할 수 있..

apple/WWDC 2025.06.29

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

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

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

지하철 검색 기능에 캐싱 로직 도입하기 지하철 검색 로직에 캐싱 로직을 도입. 글의 순서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도 어느순간부터 관성적으로 사용하고 있는데 이것들도 한번 같이 학습해보자.사이드 프로젝트에서 테스트코드 작성하면서 점차 더 다양한 시나리오, 동작 플로우, 알고리즘 등에 대해서 더 세분화해서 테스트를 진행하는데 전에 정리 통한 복기가 필요하다고 느낌.기존에도 유닛테스트는 자주 사용하고 있어서 익숙한데, 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..

[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도 환경 관련 이라는데 코코아팟에서 처리가능한 것..