Ce hub regroupe les patterns pour des scénarios spécifiques où les tests unitaires dbt sont utiles — environ 1 % des transformations où la logique est assez complexe pour que les tests de données seuls ne détectent pas les régressions. Chaque note couvre un pattern avec des exemples concrets et les pièges à éviter.
Prérequis
- Quand écrire des tests unitaires dbt — Les critères de décision pour savoir quels modèles justifient des tests unitaires
- Tests unitaires vs tests de données dans dbt — Pourquoi vous avez besoin des deux et ce que chacun détecte
- Taxonomie des tests dbt — Les cinq mécanismes de validation que dbt fournit
Patterns de base
Tester les modèles incrémentaux dans dbt
Le pattern de test dual-mode : surcharger is_incremental() et mocker this pour tester les deux chemins full-refresh et incrémental. Couvre la logique de merge et l’insight clé selon lequel les blocs expect montrent les insertions, pas l’état final de la table.
Tester les consumers de snapshots dans dbt Trois stratégies pour tester la logique liée aux snapshots : modèles base pré-snapshot, calculs de plages de dates SCD2 dans les consumers en aval, et hachage pour la détection de changements.
Tester les fonctions de fenêtre dans dbt Comment concevoir des données de test qui valident le partitionnement, l’ordonnancement et le framing. Principes clés : lignes sources dans le désordre, partitions multiples et valeurs distinctives qui rendent les mauvais résultats évidents.
Tester la logique CASE WHEN dans dbt Tests systématiques aux limites : valeurs exactes de seuil, valeurs juste en dessous, gestion des nulls et le ELSE implicite. Le pattern pour la segmentation client, les paliers de prix et la dérivation de statuts.
Tester l’extraction de chaînes dans dbt Documentation des cas limites pour les regex et la manipulation de chaînes : cas simples, domaines complexes, gestion de la casse, entrées invalides et gestion des nulls. Protection contre les régressions pour une logique de parsing fragile.
Patterns d’analytics marketing
Tester la sessionisation GA4 Détection des limites de session, sessions à cheval sur minuit, timestamps en microsecondes et sessions à événement unique. Tester la logique qui pilote les taux de conversion et la durée des sessions.
Tester les modèles d’attribution dans dbt Tests first-touch et last-touch avec des parcours multi-sessions, des conversions single-touch et le pattern d’exclusion sans conversion.
Tester les entonnoirs de conversion dans dbt Tests de taux de conversion étape par étape avec le pattern de décrochage : des utilisateurs qui quittent à chaque étape, créant des chiffres traçables. Inclut les cas limites de saut d’étapes.
Préoccupations transversales
Patterns de cas limites pour les tests unitaires dbt
Trois patterns essentiels : gestion des nulls dans les agrégations, tables vides avec format: sql et WHERE false, et tests aux limites de dates (années fiscales, années bissextiles, fuseaux horaires).
Organiser les tests unitaires dbt à grande échelle Stratégies de tags (criticité, domaine, type de test), paliers de pipeline CI (vérifications PR, validation des merges, exclusion de la production) et organisation des fichiers.
Patterns de tests de macros dbt Tester les macros via des modèles wrapper éphémères et des modèles de test d’intégration. Le workflow de débogage compile-et-inspecte.
Référence rapide
| Scénario | Pattern | Technique clé |
|---|---|---|
| Modèle incrémental | Dual-mode | is_incremental: false/true + this |
| Consumer de snapshot | Trois stratégies | Tester pré-snapshot, post-snapshot et hachage |
| Fonction de fenêtre | Concevoir les données de test | Lignes dans le désordre + partitions multiples |
| Paliers CASE WHEN | Tests aux limites | Exact + juste en dessous + null |
| Parsing de chaînes | Documentation des cas limites | Une ligne par catégorie d’entrée |
| Sessions GA4 | Limites | Cross-minuit + seuil d’inactivité |
| Attribution | Test de parcours | Multi-touch + single-touch + sans conversion |
| Entonnoirs | Décrochage | Un utilisateur quitte à chaque étape |
| Tables vides | format: sql | WHERE false avec colonnes typées |
| Logique de macro | Wrapper éphémère | Modèle éphémère appelant la macro |