-
Notifications
You must be signed in to change notification settings - Fork 1
❗ 테스트끼리의 독립성
SeungJae Son edited this page Dec 1, 2024
·
1 revision
기본적으로 Swift Testing은 XCTest와 다르게 병렬적으로 실행됩니다.
따라서 생기는 부차적인 문제를 겪었습니다.
@Test func NetworkManager_올바른_응답() async throws {
MockURLSession.testData = testData
MockURLSession.testResponse = testResponse
let response = try await networkManager.sendRequest(to: endpoint)
#expect(response == testData)
}
@Test func NetworkManager_잘못된_응답() async throws {
MockURLSession.testData = nil
MockURLSession.testResponse = nil
await #expect(throws: ASNetworkErrors.self, performing: {
_ = try await networkManager.sendRequest(to: endpoint)
})
}
두 테스트 함수는 모두 MockURLSession을 사용합니다. XCTest는 테스트 하나가 끝나야 다음 테스트가 실행되기 때문에 저렇게 사용해도 되지만 Swift Testing에서는 병렬 실행이기 때문에 동시에 접근하는 문제가 나타났습니다.
이렇게 하나가 성공하면 다른 하나가 실패했습니다. 따라서 MockURLSession의 testData와 testResponse의 static을 제거하고, 각 테스트 함수 내에서 networkManager를 만드는 방식으로 수정했습니다.
@Test func NetworkManager_올바른_응답() async throws {
let mockURLSession = MockURLSession()
let networkManager = ASNetworkManager(urlSession: mockURLSession)
mockURLSession.testData = testData
mockURLSession.testResponse = testResponse
let response = try await networkManager.sendRequest(to: endpoint)
#expect(response == testData)
}
@Test func NetworkManager_잘못된_응답() async throws {
let networkManager = ASNetworkManager(urlSession: MockURLSession())
await #expect(throws: ASNetworkErrors.self, performing: {
_ = try await networkManager.sendRequest(to: endpoint)
})
}
- 📒 기획의 과정과 의도
- 📒 swift6 도입기 ‐ @unchecked Sendable을 사용해야만 했던 이유
- 📒 WaveForm(파형) 제작기
- 📒 프로젝트 구조와 이유
- 📒 화면 전환(Game NavigationController)
- 📒 DIContainer를 사용한 계기
- 📒 AudioHelper 제작기
- 📒 음악 플레이어의 compact 버전 제작기
- 📒 Combine을 이용한 데이터 전달
- 📒 파이어베이스를 쓰며 있었던 일
- 📒 캐싱 모듈 구현과 문제점
- 📒 로그 시스템 제작기
- ❗ Data 끼리의 비교
- ❗ 프레임워크 Reference 안잡히는 문제
- ❗ actor 안에서 timer가 실행되지 않는 문제
- ❗ NSLayoutConstraint 옵셔널 문제
- ❗ 테이블 뷰가 보고 있는 배열과 bind하고 있는 배열 간의 race condition 문제
- ❗ 테스트끼리의 독립성
- ❗ 네트워크 테스팅 시 Error 핸들링
- ❗ 여러 클라이언트가 서버에 동시 요청시, 데이터가 반영이 안되는 이슈 해결
- ❗ 의존성 framework 추가시 불러오지 못하는 문제
- ❗ Timer를 6초 설정해도 더 실행되는 문제
- ❗ Music Kit Data Request 에러
- ❗ DI Container 에서 생성한 인스턴스가 동시에 존재 하는 이슈