Skip to content

Cum să creezi teste singular în dbt

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să creezi teste singular în dbt. We cover key concepts, practical examples, and best practices.

Vei învăța cum să creezi teste singular în dbt — teste SQL personalizate care verifică reguli de business unice, stocate în directorul tests/.

Problema

Testele generice (not_null, unique) acoperă cazuri standard. Pentru reguli de business specifice — "niciun utilizator nu poate avea comenzi active în timpul nopții" — ai nevoie de teste personalizate. Testele singular răspund acestei nevoi.

Modul Greșit

-- Verificare manuală — nerepetabilă, uitată
SELECT * FROM orders
WHERE status = 'shipped' AND shipped_at IS NULL;
-- Rulezi când îți aduci aminte, dar nu e în pipeline

Modul Corect

-- tests/assert_shipped_orders_have_date.sql — test singular
-- Testul eșuează (returnează rânduri) când există comenzi
-- marcate ca 'shipped' fără dată de livrare
SELECT
    order_id,
    status,
    shipped_at
FROM {{ ref('stg_orders') }}
WHERE status = 'shipped'
  AND shipped_at IS NULL
dbt test --select test_type:singular

Output:

17:23:45  1 of 1 PASS assert_shipped_orders_have_date
17:23:45  Finished running 1 test

Când testul eșuează:

17:23:45  1 of 1 FAIL assert_shipped_orders_have_date
17:23:45  Got 3 results, expected 0

Pas cu Pas

1. Creează fișierul SQL în tests/

-- tests/assert_positive_order_total.sql
SELECT
    order_id,
    total
FROM {{ ref('stg_orders') }}
WHERE total < 0

2. Scrie testul ca SELECT care returnează eșecuri

Regula de aur: testul PASS când returnează 0 rânduri, FAIL când returnează rânduri.

-- tests/assert_no_future_dates.sql
SELECT *
FROM {{ ref('stg_orders') }}
WHERE order_date > CURRENT_DATE

3. Rulează testul

dbt test --select assert_no_future_dates
dbt test  # Rulează toate testele (generice + singular)

Sfaturi de Prevenție

  • Plasează testele singular în directorul tests/, nu models/
  • Denumește testele sugestiv: assert_no_negative_prices.sql
  • Un test ar trebui să verifice o singură regulă de business
  • Rulează testele singular separat de cele generice pentru debugging

Greșeli Comune

  1. Test care nu returnează rânduri — testul trece mereu, indiferent de date
  2. Test prea complex — verifică prea multe reguli deodată; separă în teste multiple
  3. SELECT * vs coloane specificeSELECT * e greu de citit când testul eșuează
  4. Test fără ref() — nume de tabelă hardcodat care se poate schimba

Întrebări Frecvente

### Care e diferența între teste singular și generice?

Testele singular sunt fișiere SQL în tests/ care SELECTează înregistrări problematice. Testele generice sunt parametrizabile și se declară în YAML.

Pot avea parametri în teste singular?

Nu direct. Pentru teste parametrizabile, creează un test generic custom în tests/generic/.

Cum depanez un test singular?

Rulează SQL-ul testului manual în baza de date pentru a vedea ce rânduri returnează: psql -f tests/assert_test.sql.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru teste singular robuste.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro