DEV Community

David Goyes
David Goyes

Posted on

Swift Testing #13: Montaje (setup) y desmontaje (teardown) de pruebas @Test con init/deinit

En XCTest se puede ejecutar ciertas operaciones antes y después de una prueba usando setUp() y tearDown() respectivamente.

// Antes
class SetupTests_deprecated: XCTestCase {
  var value = 1
  override func setup() async throws {
    super.setup()
    value = 0
  }
  func test1() {
    value += 10
    XCTAssert(value == 10) // ✅ La prueba pasa
  }
  func test2() {
    value += 20
    XCTAssert(value == 20) // ✅ La prueba pasa
  }
}
Enter fullscreen mode Exit fullscreen mode

En Swift Testing basta con implementar el init() de la clase o estructura que define la Suite de pruebas para ejecutar algunas operaciones antes de la prueba.

// Después
struct SetupTests {
  var value: Int
  init() async {
    value = 0
  }
  @Test
  mutating func test1() {
    value += 10
    #expect(value == 10) // ✅ La prueba pasa
  }
  @Test
  mutating func test2() {
    value += 20
    #expect(value == 20) // ✅ La prueba pasa
  }
}
Enter fullscreen mode Exit fullscreen mode

Si se requiere implementar operaciones después de una prueba (i.e. tearDown), es obligatorio trabajar la suite de pruebas como class final o un actor, en lugar de como struct, para implementar el deinit.

final class TeardownTests {
  var value: Int = 0
  deinit {
    value = -1
  }
  @Test
  func test1() {
    value += 10
    #expect(value == 10) // ✅ La prueba pasa
  }
  @Test
  func test2() {
    value += 20
    #expect(value == 20) // ✅ La prueba pasa
  }
}
Enter fullscreen mode Exit fullscreen mode

Ejecutar código antes y después de la Suite de pruebas

En XCTest se puede ejecutar ciertas operaciones antes y después de toda la suite de pruebas (XCTestCase) usando las los métodos de clase setUp() y tearDown() respectivamente.

No obstante, a la fecha (2025–11–26) no existe una forma nativa para reproducir este comportamiento en Swift Testing, según esta discusión.

Bibliografía

  • Documentación sobre Swift Testing, aquí.
  • Documentación "Testing for errors in Swift code", aquí.

Top comments (0)