[iOS] Networking Test
학습내용
네트워크 테스트란 무엇인가?
잘못된 네트워크 테스트
import XCTest
@testable import OpenMarket
final class OpenMarketNetworkTests: XCTestCase {
var sut_networkManager: NetworkManager!
var sut_apiNode: APINode!
override func setUpWithError() throws {
try super.setUpWithError()
sut_networkManager = NetworkManager()
sut_apiNode = APINode()
}
override func tearDownWithError() throws {
try super.tearDownWithError()
sut_networkManager = nil
sut_apiNode = nil
}
func test_getItemList_title() {
let expectation = XCTestExpectation()
sut_networkManager.getItemList(node: sut_apiNode, page: 1) { result in
// given
expectation.fulfill()
switch result {
// when
case .success(let itemList):
// then
XCTAssertEqual(itemList.items[0].title, "MacBook Pro" )
case .failure(let error):
XCTFail("\(error)")
}
}
wait(for: [expectation], timeout: 2)
}
}
import XCTest
@testable import OpenMarket
final class OpenMarketNetworkTests: XCTestCase {
var sut_networkManager: NetworkManager!
var sut_apiNode: APINode!
override func setUpWithError() throws {
try super.setUpWithError()
sut_networkManager = NetworkManager()
sut_apiNode = APINode()
}
override func tearDownWithError() throws {
try super.tearDownWithError()
sut_networkManager = nil
sut_apiNode = nil
}
func test_getItemList_title() {
let expectation = XCTestExpectation()
sut_networkManager.getItemList(node: sut_apiNode, page: 1) { result in
// given
expectation.fulfill()
switch result {
// when
case .success(let itemList):
// then
XCTAssertEqual(itemList.items[0].title, "MacBook Pro" )
case .failure(let error):
XCTFail("\(error)")
}
}
wait(for: [expectation], timeout: 2)
}
}
해당 테스트가 잘못된 이유는 이 테스트는 절대적으로 네트워크에 의존하고 있기 때문입니다. 그렇기 때문에 인터넷연결이 끊어지면 테스트에 실패하게 될 것입니다. 테스트가 외부변수에 의해 영향을 받고 있기 때문에 잘못된 테스트인 것입니다.
이를 개선하기 위해서는 실제 production 네트워크 매니저와 테스트에서 사용할 네트워크 매니저를 분리 시켜야 합니다. 즉 실제 앱에서는 실제 URLSession을 제공하는 네트워크 매니저를 사용할 것이지만 테스트환경에서는 이 URLSession을 흉내 내는 Mock Object
를 사용해야 합니다.
[참고]:
iOS Networking and Testing - 조원 (우아한형제들 기술블로그)
Author And Source
이 문제에 관하여([iOS] Networking Test), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@inwoodev/iOS-Networking-Test저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)