Apex Academy
Módulo 10·02·25 min

Datos de prueba y @testSetup

Un test no ve los datos de la org: empieza con la base de datos vacía y fabrica lo que necesita. @testSetup prepara esos datos una vez para todos los métodos de la clase, y todo se deshace al terminar.

En Admin esUna sandbox recién creada, sin datos, donde cargas solo lo que tu prueba necesita

✓ En esta sub-lección

  1. 01Explicar por qué un test no ve los datos de la org.
  2. 02Preparar datos con @testSetup y recuperarlos con una consulta.
  3. 03Saber qué pasa con los datos de un test cuando termina.

La nutria: ¿Te acuerdas? · Repaso de la lección 1

¿Dónde va la anotación @isTest?

La siguiente pieza del puente es el guardián de renovaciones del Módulo 8: un trigger que rechaza una segunda renovación abierta para la misma cuenta. Para probarlo hacen falta cuentas y oportunidades. Pero las de tu org no sirven, y no por prudencia: el test ni siquiera las ve.

Cada test empieza con la base de datos vacía

Por defecto, un test no ve los registros de la org: una consulta a Account devuelve cero filas. Es a propósito. Si el test dependiera de datos reales, pasaría en una sandbox y fallaría en otra, o el día que alguien borrara «la cuenta de pruebas». Así que cada test fabrica lo que necesita, y al terminar Salesforce deshace todo lo que el test insertó: nada llega a guardarse.

@testSetup: los datos, una vez para todos

Apex
@testSetup
static void setup() {
    insert new List<Account>{ new Account(Name = 'Acme'), new Account(Name = 'Globex') };
}

@isTest
static void allowsTheFirstRenewal() {
    Account globex = [SELECT Id FROM Account WHERE Name = 'Globex' LIMIT 1];   // se recupera
    // …
}
El método @testSetup se ejecuta una vez antes de los tests de la clase. Cada test recibe esos datos tal como los dejó el setup: lo que cambie un test no lo ve el siguiente.

Las variables del setup no llegan a los tests; los registros sí. Por eso cada test los recupera con una consulta, por nombre o por algún campo que los identifique. Y como el setup es código normal, sigue las reglas de siempre: un insert por lista, no uno por registro.

LA ORG DE VERDAD

5.000 cuentas de la org

LO QUE VE EL TEST

nada: base de datos vacía

Paso 1 de 5

Una clase de test con un @testSetup y dos tests. Pulsa Reproducir.

Ejecuta los tests de la clase y mira qué datos ve cada uno: los de la org, los del setup y los que cambió el test anterior.

La nutria: ¿Y por qué no un Flow? Porque sus tests no ven al padre

En un test de Flow también defines el registro de prueba campo a campo. El límite es que solo trabaja con el objeto del flow: no puedes preparar la cuenta y una renovación que ya existía. Y el guardián depende justo de eso, de otras oportunidades de la misma cuenta. Con @testSetup preparas el escenario completo: cuentas, oportunidades y lo que haga falta.