Primeros pasos · 02

Escribe tests que escalan.

Cada caso tiene un contexto aislado. Las aserciones actualizan ese contexto y el manifiesto aporta nombres, tags y conexión con el runner.

1. Declara el contexto

El contexto agrupa habilitación, contadores y diagnóstico. Declara uno por caso para evitar que una prueba contamine a otra:

PROGRAM TestRunner
VAR
    TestEquals : ST_TestCaseContext;
    Expected : INT := 10;
    Actual : INT := 10;
END_VAR

2. Ejecuta una aserción

Conecta el contexto completo mediante Context :=. El runner activará el caso antes del ciclo PLC:

IF TestEquals.Enabled THEN
    AssertEqualsINT(
        Expected := Expected,
        Actual := Actual,
        Context := TestEquals
    );
END_IF;

El contador, las aprobadas, las fallidas y el diagnóstico quedan en TestEquals.

3. Aserciones para señales PLC

Para valores analógicos usa tolerancia absoluta; para registros usa máscaras; para lógica secuencial usa una aserción con límite de scans:

AssertNearREAL(Expected := 2.5, Actual := Sensor, Tolerance := 0.05, Context := TestAnalog);
AssertBitSetWORD(Value := StatusWord, Mask := 16#0004, Context := TestBits);
AssertEventually(Condition := MotorRunning, TimeoutScans := 20, Context := TestSequence);

FB_AssertEventually cuenta una sola aserción y conserva su estado entre scans; ejecuta el runner con --cycles suficiente para cubrir la ventana temporal.

4. Registra el caso

El manifiesto externo da estabilidad al nombre del caso y permite filtrarlo sin cambiar el código ST:

{
  "id": "equals_int",
  "name": "INT equality",
  "prefix": "TestEquals",
  "tags": ["smoke", "int"]
}

Buenas prácticas

  • Un caso debe explicar una sola expectativa observable.
  • Usa tags estables como smoke, diagnostic u ordering.
  • Mantén los datos de entrada explícitos y evita depender del estado de otro caso.
  • Para suites multi-scan, protege las aserciones que solo deban ejecutarse una vez.

Ya tienes un caso.
Consulta las aserciones disponibles y el diagnóstico.

Ver aserciones →