์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- BFS
- XCTest
- CollectionView
- SwiftUI
- arkit
- tableView
- combine
- visionOS
- Lv2
- designpattern
- SnapKit
- reactorkit
- raywenderlich
- swift
- ํ๋ก๊ทธ๋๋จธ์ค
- ํจ์คํธ์บ ํผ์ค
- TCA
- RxSwift
- UIKit
- realm
- ๋ฐฑ์ค
- node.js
- Swfit
- ios
- Kuring
- Xcode
- rxcocoa
- MVVM
- Flutter
- BOJ
- Today
- Total
lgvv98
part5 (ch6). KeywordNews XCTest ์ฝ๋๋ฆฌ๋ทฐ ๋ณธ๋ฌธ
part5 (ch6). KeywordNews XCTest ์ฝ๋๋ฆฌ๋ทฐ
๐ฅ ์บ๋ฟ๋งจ 2022. 2. 17. 02:23โ ์ฝ๋ ๋ฆฌ๋ทฐ๋ ์ธ์ ๋ ํฌ์คํ ๊ณผ ํจ๊ปํ๋ค.
์ด ๋ถ๋ถ์ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๋ณผ ๊ฒ ๊ฐ์ง๋ ์๊ณ ๋ ํผ์ ์ฐ๋ ๋ง์ด๋ผ์ ๋ ํธํ๋ฐ ๊ณง ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ์ ์ผ์์ด๋ ๋ด์๋ด์ผ๊ฒ ๋ค.
๊ทธ๋์ ์ด๋ฐ๊ฑฐ ์์ฐ๋๋ฉด ๋ด๊ฐ ๊นํ๋ธ์ ํ์ผ ๋ฐ๋ก ์ฌ๋ ค ์ ๋ฆฌํ๋๊ฒ ๋ํํ ๋ ์ข์ ํ์ต์ผ๋ก ๋ค๊ฐ์ค์ง ์์์, ๋ธ๋ก๊ทธ์ ๊ธ์ ์ฌ๋ฆฌ๋ฉด์ ๋ค์ ๋ณด๋๊ฒ ๋์ฑ ์ข๋๋ผ
โ ํ์ผ์ ๊ตฌ์กฐ
โ ๋ง๋ฌ๋ ๋ฌธ์ ํ๋.
์ด๊ฑฐ ํด๊ฒฐํ๋ค๊ฐ ๋จธ๋ฆฌ ํฐ์ง๋ป ... ใ ใ ..
โ NewsListPresenterTest.swift
//
// NewsListPresenterTest.swift
// KeywordNews
//
// Created by Hamlit Jason on 2022/02/09.
//
import XCTest
@testable import KeywordNews
class NewsListPresenterTest: XCTestCase {
var sut: NewsListPresenter!
var viewController: MockNewsListViewController!
var newsSearchManager: MockNewsSearchManager!
override func setUp() {
super.setUp()
viewController = MockNewsListViewController()
newsSearchManager = MockNewsSearchManager()
sut = NewsListPresenter(viewController: viewController, newsSearchManager: newsSearchManager)
}
override func tearDown() {
// tearDown์ setUp์ ๋ฐ๋ ์์๋ก ํ๋๊ฒ ์์
sut = nil
newsSearchManager = nil
viewController = nil
}
func test_viewDidLoad๊ฐ_๋ถ๋ ค์ก์๋() {
sut.viewDidLoad()
XCTAssertTrue(viewController.isCalledSetupNavigationBar)
XCTAssertTrue(viewController.isCalledSetupLayout)
}
func test_didCalledRefresh๊ฐ_์์ฒญ๋ ๋_request์_์ฑ๊ณตํ๋ฉด() {
newsSearchManager.error = nil
sut.didCalledRefresh()
XCTAssertTrue(viewController.isCalledReloadTableView)
XCTAssertTrue(viewController.isCalledEndRefreshing)
}
func test_didCalledRefresh๊ฐ_์์ฒญ๋ ๋_request์_์คํจํ๋ฉด() {
newsSearchManager.error = NSError() as Error
sut.didCalledRefresh()
XCTAssertFalse(viewController.isCalledReloadTableView)
XCTAssertFalse(viewController.isCalledEndRefreshing)
}
}
์๋ฌ ํธ๋ค๋ง ํ๋ ๋ถ๋ถ์ด ์กฐ๊ธ ํน์ดํ๋ฐ, ๋งค๋์ ์ ์๋ฌ๋ฅผ ์ค ์๋ ์๊ผฌ, ์์ค ์๋ ์๋ค.
โ MockNewsSearchManager.swift
//
// MockNewsSearchManager.swift
// KeywordNews
//
// Created by Hamlit Jason on 2022/02/09.
//
import Foundation
@testable import KeywordNews
final class MockNewsSearchManager: NewsSearchManagerProtocol {
var error: Error?
var isCalledRequest = false
func request(
from keyword: String,
start: Int,
display: Int,
completionHandler: @escaping ([News]) -> Void
) {
isCalledRequest = true
if error == nil {
completionHandler([])
}
}
}
์๋ฌ๋ฅผ ํธ๋ค๋ง ํ ์ ์๊ฒ๋ ๋งค๋์ ๋ฅผ ๋ง๋๋ ๋ชจ์ต์ด ํน์ดํ๋ค.
๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์ปดํ๋ฆฌ์ ํธ๋ค๋ฌ๋ฅผ ๋ค๋ฃฌ๋ค๋
โ MockNewsListViewController.swift
//
// MockNewsListViewController.swift
// KeywordNews
//
// Created by Hamlit Jason on 2022/02/09.
//
import XCTest
@testable import KeywordNews
final class MockNewsListViewController: NewsListProtocol {
var isCalledSetupNavigationBar = false
var isCalledSetupLayout = false
var isCalledEndRefreshing = false
var isCalledMoveToNewsWebViewController = false
var isCalledReloadTableView = false
func setupNavigationBar() {
isCalledSetupNavigationBar = true
}
func setupLayout() {
isCalledSetupLayout = true
}
func endRefreshing() {
isCalledEndRefreshing = true
}
func moveToNewsWebViewController(with news: News) {
isCalledMoveToNewsWebViewController = true
}
func reloadTableView() {
isCalledReloadTableView = true
}
}
ํ ์คํธ ์ฝ๋๋ ์ง์ง ์์ฒญ๋๊ฒ ์ด์ฌํ ๊ณต๋ถํด๋ด์ผ๊ฒ ๋ค
'โ ๏ธ deprecated โ ๏ธ > ํจ์บ (์ด๊ฒฉ์ฐจ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
part5 (ch1). FindCVS UnitTest ์ฝ๋๋ฆฌ๋ทฐ (feat. Stubber) (0) | 2022.02.20 |
---|---|
part5 (ch1). FindCVS ์ฝ๋๋ฆฌ๋ทฐ (0) | 2022.02.20 |
part5 (ch6). KeywordNews ์ฝ๋๋ฆฌ๋ทฐ (0) | 2022.02.15 |
part5 (ch6). ๐ช CI/CD๋? (feat. bitrise) (0) | 2022.02.15 |
part5 (ch6). MovieReview XCTest ์ฝ๋๋ฆฌ๋ทฐ (0) | 2022.02.01 |