Swift Testing #4: 테스트를 순차적으로 실행

발행: (2025년 12월 5일 오전 07:15 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Swift Testing에서 테스트 실행

XCTest에서 테스트를 동시에 실행하는 것은 선택 사항이며, 실제로 기본값은 순차적으로 실행됩니다. 반면 Swift Testing에서는 기본적으로 병렬 실행됩니다.

비록 권장되지 않지만, 때때로 테스트 스위트를 순차적으로 실행해야 할 경우가 있습니다. 이는 테스트 대상 코드가 테스트들 사이에 공유되는 정적 상태를 가지고 있기 때문일 가능성이 높습니다.

정적 상태 문제 예시

다음 State 클래스를 고려해 보겠습니다:

class State {
    private static var numbers = [1, 2, 3]
    func add(number: Int) {
        State.numbers.append(number)
    }
    func add(numbers: [Int]) {
        State.numbers.append(contentsOf: numbers)
    }
    func removeLastNumber() -> Int? {
        State.numbers.popLast()
    }
    var count: Int {
        State.numbers.count
    }
}

다음 테스트들은 동일한 정적 상태를 공유하기 때문에 대부분 실패할 것입니다:

struct StaticTests {
    let state = State()
    @Test
    func test1() {
        state.add(numbers: [4, 5])
        #expect(state.count == 5)
        #expect(state.removeLastNumber() == 5)
    }
    @Test
    func test2() {
        state.add(numbers: [6, 7])
        #expect(state.count == 6)
        #expect(state.removeLastNumber() == 7)
    }
}

테스트를 순차적으로 실행하기

테스트가 정상적으로 동작하도록 하려면, Suite를 명시적으로 설정하고, .serialized 트레이트를 사용해 순차 실행하도록 지정해야 합니다.

순차적으로 실행되는 테스트 예시:

@Suite(.serialized) // Definir explícitamente la Suite
struct StaticTests {
    let state = State()
    @Test
    func test1() {
        state.add(numbers: [4, 5])
        #expect(state.count == 5)
        #expect(state.removeLastNumber() == 5)
    }
    @Test
    func test2() {
        state.add(numbers: [6, 7])
        #expect(state.count == 6)
        #expect(state.removeLastNumber() == 7)
    }
}

참고 문헌

  • 비디오 “Mastering Swift Testing: Run Serialized Tests with One Line of Code!” (Swift and Tips), 여기.
  • 재생목록 “Swift Testing” (Swift and Tips), 여기.
  • Swift Testing에 대한 문서, 여기.
  • 문서 “Running tests serially or in parallel”, 여기.
Back to Blog

관련 글

더 보기 »