Prova d'oro

TFF include una piccola libreria chiamata golden che semplifica la scrittura e la manutenzione dei golden test.

Cosa sono i test d'oro? Quando dovrei usarli?

I golden test vengono utilizzati quando vuoi che uno sviluppatore sappia che il suo codice ha alterato l'output di una funzione. Violano molte caratteristiche dei buoni test unitari in quanto fanno promesse sugli esatti risultati delle funzioni, invece di testare un insieme specifico di proprietà chiare e documentate. A volte non è chiaro quando è "prevista" una modifica a un output golden o se sta violando qualche proprietà che il golden test mirava a far rispettare. Pertanto, un test unitario ben strutturato è solitamente preferibile a un golden test.

Tuttavia, i golden test possono essere estremamente utili per convalidare il contenuto esatto dei messaggi di errore, della diagnostica o del codice generato. In questi casi, i golden test possono essere utili per verificare che eventuali modifiche all'output generato "sembrino corrette".

Come dovrei scrivere i test usando golden ?

golden.check_string(filename, value) è il punto di ingresso principale nella libreria golden . Controllerà la stringa value rispetto al contenuto di un file il cui ultimo elemento del percorso è filename . Il percorso completo del filename deve essere fornito tramite un argomento della riga di comando --golden <path_to_file> . Allo stesso modo, questi file devono essere resi disponibili ai test utilizzando l'argomento data della regola py_test BUILD. Utilizzare la funzione location per generare un percorso relativo appropriato corretto:

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",
  ],
  ...
)

Per convenzione, i file golden dovrebbero essere posizionati in una directory sorella con lo stesso nome della destinazione del test, con suffisso _goldens :

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

Come posso aggiornare i file .expected ?

I file .expected possono essere aggiornati eseguendo la destinazione del test interessata con gli argomenti --test_arg=--update_goldens --test_strategy=local . La differenza risultante dovrebbe essere controllata per eventuali modifiche impreviste.