전체 글(57)
-
Mock은 Stub이 아니다 - Martin Fowler(1편, Swift)
Mock은 Stub이 아니다 - Martin Fowler(1편, Swift) Mocks Aren't Stubs 해당 글은 공부를 위해 원글을 번역한 것이며, 번역과 이해에 틀린 부분이 있을 수 있습니다. 글 내용이 Java코드로 이루어져 있으며 제가 임의로 Swift코드로 변경하였습니다. 틀린 내용이 있으실 경우 말씀해주시면 변경하겠습니다. Martin Fowler 마틴 파울러 - 위키백과, 우리 모두의 백과사전 UML, 패턴, 애자일 개발론 등을 전문으로 하는 개발자 Refactoring이라는 책의 저자이다. Regular Tests 간단한 예시로 진행할 예정이다. 주문 객체와 창고객체가 존재한다. 창고 객체는 주문 객체에 추가되며, 주문을 할 경우 창고로부터 두가지 응답이 발생한다. 창고에 주..
2023.12.22 -
백준 4179 - 불!(Swift)
백준 4179 - 불!(Swift) 4179번: 불! 접근법 지훈이를 우선적으로 BFS를 실행하며 한번 실행할 때마다 현재 큐에 있는 불 개수만큼 불을 추가함 이후 현재 지훈이의 위치 중 x, y가 하나라도 경계에 들어올 경우 종료 실패코드(메모리 초과) import Foundation struct Queue { private var enqueueStack: [T] = [] private var dequeueStack: [T] = [] var isEmpty: Bool { return enqueueStack.isEmpty && dequeueStack.isEmpty } var count: Int { return enqueueStack.count + dequeueStack.count } mutating fun..
2023.12.12 -
iOS 테스트코드의 이모저모 - 2편
Test Double Dummy 무언가 값을 채우기 위해 사용하지만 사용되지 않는 객체를 의미 보통 함수, 메서드의 인자를 채울 때 사용 뷰모델의 초기 상태를 테스트 할 때 만약, 뷰모델이 두개의 타입에 대해 의존적인 상황이라면 Dummy데이터를 만들어줌으로 뷰모델을 생성하여 테스트 할 수 있다. struct DummyWatchlistStore: WatchlistStore { func update(_ stockSymbols: [String]) throws { } func retrieve() throws -> [String]? { [] } } struct DummyQuotesService: QuotesService { func getQuotes(symbols: [String], completion: @es..
2023.12.06 -
iOS 테스트코드의 이모저모 - 1편
TDD(Test-Driven Development) 정의 - 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나 TDD는 개발 프로세스를 크게 3가지로 나눌 수 있다. 코드 작성 테스트 코드 작성 리팩토링 위 그림을 토대로 3가지를 조금 더 세분화하여 설명하면 다음과 같다. 1. 코드 작성 테스트 코드를 실행할 수 있도록 최소한의 코드를 작성해야한다. 여기서 말하는 최소한이란 단순히 곧바로 기능을 다 하는것이 아닌 테스트케이스가 실패하도록 만들어야하며, 한가지의 테스트코드 작성이 끝나면 해당 테스트코드 해결을 위해 다시 최소한의 코드를 작성해야한다. 2. 테스트 코드 작성 테스트 코드 작성의 핵심은 현재 구현된 코드가 실패하도록 만드는 테스트 케이스를 작성하는 것이다. 예를들어, 자연수 ..
2023.12.04 -
How to run tests in RxSwift 및 적용해보기
How to run tests in RxSwift 아래 내용은 밑의 참고 링크를 일부 번역하고 약간 변형을 주어 공부한 내용입니다. 번역에 오류가 있거나 이해한 것이 틀릴 수 있습니다. 참고 - How to run tests in RxSwift RxTest와 RxBlocking의 경우 RxSwift 레포지토리 중 일부이지만 분리 되어있기 때문에 따로 불러 올 필요가 있습니다. SPM을 사용했을 경우 RxSwift와 RxCocoa만을 import했다면 추가적으로 불러와서 사용해야합니다. RxTest 의 경우 Rx코드를 테스팅 하는데 매우 유용한 추가기능을 제공합니다. 특히, TestScheduler의 경우 가상의 시간을 설정하여 특정 시간마다 이벤트를 발생 시킬 수 있습니다. RxBlocking 의 경우 ..
2023.11.28 -
백준 2617 - 구슬 찾기(Swift)
2617번: 구슬 찾기 접근법 우선 단방향 그래프로 BFS를 통해 구현 2 1로 입력이 주어질 경우 2번 공이 1번 공보다 무게가 크다 생각하여 2번 공에 1번 공으로 향하는 방향을 설정 첫번째 방문하는 노드가 (N+1) / 2 이상일 경우 +1 두번째 모든 공이 방문하는 노드를 +1을 하여 방문된 노드가 (N+1) / 2 이상일 경우 +1 실패코드 import Foundation struct Queue { private var enqueueStack: [T] = [] private var dequeueStack: [T] = [] var isEmpty: Bool { return enqueueStack.isEmpty && dequeueStack.isEmpty } mutating func enqueue(_ ..
2023.11.28