Skip to content

❗ 테스트끼리의 독립성

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)
        })
    }

iOS07 프로젝트 일지

📚 문서

🫶🏻 팀 기록

🎤 프로젝트

💡 핵심 경험

🚨 트러블 슈팅

📔 학습 정리

🪄 QA

Clone this wiki locally