Test 5

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

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

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

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 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] Xcode 기존 프로젝트에 XCTest 작성 파일 추가하기

(XCTest) Xcode 기존 프로젝트에 XCTest 작성 파일 추가하기 우선 아래 에러에 대해서 분석해보자Library not loaded: @rpath/XCTest.framework/XCTest저거 프레임워크 동적으로 읽을 때 찾는 경로에서 없어서 발생하는 문제 Xcode 파일을 만들 때, test를 include하지 않고 만들었다가 이후에 테스트를 해야해서 테스트 코드 파일을 만들고 돌리는데, 앱이 죽어버리는 상황이 발생.그래서 로그 훑어 보니까 저런 에러라 어떻게 할까 찾아봄. 해결법 경로가 없어서 발생하는 문제인데, 나는 아예 추가 자체를 안해서 발생하는 문제라 아래 기존 프로젝트에 타겟을 만들고 연결해줌.Tuist나 SPM이 아니라 수동으로 프레임워크를 관리해서 이걸 수정