Test d'or

TFF comprend une petite bibliothèque appelée golden qui facilite l'écriture et la maintenance de tests Golden.

Que sont les tests d'or ? Quand dois-je les utiliser ?

Les tests Golden sont utilisés lorsque vous souhaitez qu'un développeur sache que son code a modifié le résultat d'une fonction. Ils violent de nombreuses caractéristiques des bons tests unitaires dans la mesure où ils font des promesses sur les résultats exacts des fonctions, plutôt que de tester un ensemble spécifique de propriétés claires et documentées. Il n'est parfois pas clair quand une modification apportée à une sortie standard est "attendue" ou si elle viole une propriété que le test standard cherchait à appliquer. En tant que tel, un test unitaire bien pondéré est généralement préférable à un test d’or.

Cependant, les tests de référence peuvent être extrêmement utiles pour valider le contenu exact des messages d'erreur, des diagnostics ou du code généré. Dans ces cas-là, les tests de référence peuvent être utiles pour vérifier que toute modification apportée au résultat généré « semble correcte ».

Comment dois-je écrire des tests en utilisant golden ?

golden.check_string(filename, value) est le point d'entrée principal dans la bibliothèque golden . Il vérifiera la chaîne value par rapport au contenu d'un fichier dont le dernier élément de chemin est filename . Le chemin complet vers filename doit être fourni via un argument de ligne de commande --golden <path_to_file> . De même, ces fichiers doivent être mis à disposition des tests en utilisant l'argument data de la règle py_test BUILD. Utilisez la fonction location pour générer un chemin relatif approprié et correct :

py_string_test(
  ...
  args = [
    "--golden",
    "$(location path/to/first_test_output.expected)",
    ...
    "--golden",
    "$(location path/to/last_test_output.expected)",
  ],
  data = [
    "path/to/first_test_output.expected",
    ...
    "path/to/last_test_output.expected",
  ],
  ...
)

Par convention, les fichiers golden doivent être placés dans un répertoire frère portant le même nom que leur cible de test, suffixé par _goldens :

path/
  to/
    some_test.py
    some_test_goldens/
      test_case_one.expected
      ...
      test_case_last.expected

Comment mettre à jour les fichiers .expected ?

Les fichiers .expected peuvent être mis à jour en exécutant la cible de test concernée avec les arguments --test_arg=--update_goldens --test_strategy=local . La différence résultante doit être vérifiée pour déceler des changements imprévus.