일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 리펙토링
- 스위프트
- Clean Code
- 리펙터링
- tableView
- Refactoring
- rxswift
- 클린 코드
- uiscrollview
- ribs
- collectionview
- uitableview
- UICollectionView
- MVVM
- SWIFT
- 리팩토링
- swiftUI
- ios
- Xcode
- clean architecture
- RxCocoa
- Protocol
- map
- swift documentation
- combine
- Observable
- HIG
- Human interface guide
- 애니메이션
- UITextView
- Today
- Total
목록Unit Test (7)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/It6Gh/btsI4pC2hV3/hBePnFrj4sybClPGKNENFK/img.png)
1. xcodebuild로 테스트 돌리기 - 개념 (xcodebuild, unit test, ui test)2. xcodebuild로 테스트 돌리기 - 결과 얻어오기 (xcresult)3. xcodebuild로 테스트 돌리기 - xcresult 파일 변환하여 분석하기 (xcrun xcresulttool, xcpretty, junit)xcodebuild로 유닛 테스트 돌리기지난번 글에서 아래처럼 xcodebuild test [options]으로 빌드가 가능이렇게 유닛테스트를 실행하면 결과도 가져올 수 있는데, 이 결과를 통해 유닛 테스트가 잘 되었는지 분석도 가능xcodebuild test -scheme -destination 'platform=iOS Simulator,name=iPhone 15'결과 가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bRlDBH/btrTmus81DZ/yWnPJ5p8tGy0QEZ66KHg4k/img.png)
1. 유닛 테스트 방법 - Dependency Injection (@Injected) 주입 구조 2. 유닛 테스트 방법 - Quick과 Nimble을 이용한 테스트 코드 구현 방법 3. 유닛 테스트 방법 - RxExpect를 이용한 Rx관련 비동기 테스트 코드 구현 방법
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dDXNG5/btrmvdyHp73/r2s0ZUXyySCk5aS4eBsZdk/img.png)
1. ReactorKit - 개념 2. ReactorKit - 테스트 방법 (Storyboard 사용, IBOutlet 테스트 방법) 3. ReactorKit - `TaskList 구현`, 템플릿 (template), 비동기 처리 transform(mutation:) 4. ReactorKit - `TaskEdit 구현`, 화면전환, 데이터 전달 * 해당 코드는 ReactorKit git repository 코드를 참고하였습니다. * Unit Test가 중요한 이유, 클린 코드: https://ios-development.tistory.com/770 * Counter 예제 코드: https://github.com/JK0369/ExReactorKit/tree/BaseComponent ReactorKit 테스..
Unit Test 코드가 중요한 이유 테스트 케이스가 있으면, 실제 코드를 변경하는 것이 두렵지 않은 장점이 존재 유연성, 유지보수성, 재사용성을 제공 테스트 케이스가 있으면, 실제 코드를 변경할 때 테스트 케이스를 사용하여 수정한 코드가 잘 돌아가는지 테스트할 수 있기 때문에 결함율이 낮아지는 효과 (= 유연성과 유지보수성) 테스트 케이스를 작성해 놓으면 해당 테스트 케이스는 계속 사용할 수 있으므로 재사용성 제공 아키텍처가 아무리 유연하고 설계를 아무리 잘 나누었더라도, 테스트 케이스가 없다면 변경에 주저할 수 밖에 없는 상황이 발생 쌓인 테스트 케이스, 즉 테스트 슈트는 설계와 아키텍처를 변경하기 쉬워지므로, 이런 것들을 최대한 깨끗하게 보존하는 열쇠 TDD의 개념 Test Driven Develo..
1. DI패턴 (필요한 곳에서 protocol에 선언하는 방법) 2. 테스트 구조를 고려한 DI패턴 Usecase Test를 위한 ViewModel 구조 ViewModel에 Input, Output이 존재하고 특정 Input일때 mock usecase를 동작시켜서 예상되는 Output이 나오는지 확인 ViewModel의 Input, Output 정의 protocol AInput { func viewDidLoad() } protocol AOutput { var calculatedValue: Observable { get } } protocol AViewModel: AInput, AOutput {} DefaultAViewModel 정의 final class DefaultAViewModel: AViewMode..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Ck4Zf/btqJzsUOqsX/YERUYHOTbYQf3L5JBul5JK/img.png)
* 사용되는 라이브러리 - RxSwift - RxCocoa - RxTest (RxSwift의 스트림들을 테스트 할 수 있는, 가상 시간을 함께 이벤트를 발생시킬 수 있는 프레임워크) - RxNimble (expect라는 함수로 명료하게 테스트를 할 수 있게 해주는 프레임워크) 1. 간단한 RxSwift, MVVM구조 설계 RxSwift구조 코드 참고: ios-development.tistory.com/173 2. Unit 테스트 코드 작성 1) Nimble프레임워크에서 사용 할 events함수 정의 import Foundation import RxSwift import RxTest import Nimble import RxNimble // Tests그룹 하위에, ExpectationExtensions.s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/deLeRU/btqWUq3VQFD/M78SEHM3aQ4D6kOX30wsl0/img.png)
테스트 대상 코드 class Converter { func starPrint(number: Int) -> String { return String(repeating: "*", count: number) } } Nimble 프레임워크 Nimble: "재빠른" 다양한 assertion 제공 가독성 좋은 실패 메세지 제공: (XCTAssert에서는 실패 메세지를 따로 정의해주어야 확인이 쉬움) - XCTAssertTrue(result, "1") // 틀린경우 "XCTAssertTrue failed" - XCTAssertTrue(result, "1", "입력값에 대한 값이 틀림") // 틀린경우 아래와 같은 메세지 func testExample() throws { let result = converter?.st..