Pruebas asíncronas y medición del rendimiento
Pruebe funciones async con async/await y mida el rendimiento con XCTMeasureOptions.
Pruebas asíncronas y medición del rendimiento es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
Pruebas de funciones asíncronas
Declare los métodos de prueba como async throws para usar await directamente dentro del cuerpo de la prueba sin código adicional innecesario.
final class FetcherTests: XCTestCase {
func testFetchReturnsUser() async throws {
let user = try await UserService().fetchUser(id: 1)
XCTAssertEqual(user.name, "Alice")
}
}setUp y tearDown asíncronos
Redefina setUp() async throws para realizar la inicialización asíncrona antes de cada prueba.
override func setUp() async throws {
try await super.setUp()
sut = await AsyncService.make()
}XCTestExpectation para API basadas en callbacks
Para las API que usan callbacks en lugar de async/await, use XCTestExpectation y wait(for:timeout:).
func testCallback() {
let exp = expectation(description: "data received")
service.fetchWithCallback { data in
XCTAssertNotNil(data)
exp.fulfill()
}
wait(for: [exp], timeout: 5.0)
}Inversión de expectativas
Una expectativa invertida produce un fallo si SÍ se cumple; resulta útil para comprobar que un callback NO se llama.
let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)XCTMeasure para medir el rendimiento
measure {} ejecuta su bloque 10 veces e informa del tiempo medio, la desviación estándar y la comparación con la línea base.
func testSortPerformance() {
let data = Array(0..<10_000).shuffled()
measure {
_ = data.sorted()
}
}XCTMeasureOptions
Configure el número de iteraciones y la métrica que se medirá (tiempo, memoria o CPU).
func testParsePerformance() {
let options = XCTMeasureOptions()
options.iterationCount = 5
measure(options: options) {
_ = try? JSONDecoder().decode([Item].self, from: largeJSON)
}
}Medición del rendimiento asíncrono
Use measure(metrics:options:block:) con un bloque asíncrono para medir operaciones asíncronas.
func testAsyncFetchPerformance() {
measure {
let exp = expectation(description: "done")
Task {
_ = try? await service.fetchAll()
exp.fulfill()
}
wait(for: [exp], timeout: 10)
}
}Líneas base
Después de ejecutar una prueba de medición, establezca una línea base en Xcode. Las ejecuciones futuras fallarán si el rendimiento empeora más allá del umbral.
// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baselinePruebas de código aislado en actores
Acceda al estado aislado en un actor desde las pruebas mediante await.
actor Counter { var value = 0; func increment() { value += 1 } }
final class CounterTests: XCTestCase {
func testIncrement() async {
let counter = Counter()
await counter.increment()
let val = await counter.value
XCTAssertEqual(val, 1)
}
}Swift Testing (Swift 6)
Swift 6 incluye el nuevo framework Testing, con @Test, #expect y @Suite, como alternativa moderna a XCTest.
import Testing
@Suite struct MathTests {
@Test func addition() {
#expect(2 + 2 == 4)
}
}Combinación de XCTest y Swift Testing
Ambos frameworks pueden coexistir en el mismo destino de pruebas durante la migración de XCTest a Swift Testing.
import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executedComprobación rápida
¿Qué API de XCTest mide el rendimiento de un bloque de código y lo compara con una línea base almacenada?
Resumen de la lección
Marque los métodos de prueba como async throws para usar await directamente. Use XCTestExpectation para las API basadas en callbacks. Mida con measure {} y establezca líneas base para detectar regresiones. Pruebe los actores con await. Explore @Test y #expect de Swift Testing para las pruebas modernas.
Preguntas frecuentes
¿La lección «Pruebas asíncronas y medición del rendimiento» es gratis?
Sí — el texto completo de «Pruebas asíncronas y medición del rendimiento» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Pruebas asíncronas y medición del rendimiento»?
Pruebe funciones async con async/await y mida el rendimiento con XCTMeasureOptions. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Pruebas asíncronas y medición del rendimiento»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configuración, desmontaje y métodos de prueba de XCTestCase
- Familia XCTAssert y aserciones que lanzan errores
- Mocking basado en protocolos e inyección de dependencias
- Pruebas asíncronas y medición del rendimiento