TFF zawiera małą bibliotekę o nazwie golden
, która ułatwia pisanie i utrzymywanie złotych testów.
Czym są złote testy? Kiedy powinienem ich używać?
Złote testy są używane, gdy chcesz, aby programista wiedział, że jego kod zmienił wynik funkcji. Naruszają wiele cech dobrych testów jednostkowych, ponieważ obiecują dokładne wyniki funkcji, zamiast testować określony zestaw jasnych, udokumentowanych właściwości. Czasami nie jest jasne, kiedy „oczekiwana jest” zmiana na złote wyjście lub czy narusza to jakąś właściwość, którą miał egzekwować złoty test. W związku z tym dobrze przemyślany test jednostkowy jest zwykle lepszy niż złoty test.
Jednakże złote testy mogą być niezwykle przydatne do sprawdzania dokładnej treści komunikatów o błędach, diagnostyki lub wygenerowanego kodu. W takich przypadkach złote testy mogą być pomocne w sprawdzeniu pewności, że wszelkie zmiany w wygenerowanych wynikach „wyglądają dobrze”.
Jak powinienem pisać testy przy użyciu golden
?
golden.check_string(filename, value)
jest głównym punktem wejścia do golden
biblioteki. Sprawdzi ciąg value
z zawartością pliku, którego ostatnim elementem ścieżki jest filename
. Pełną ścieżkę do filename
należy podać za pomocą argumentu wiersza poleceń --golden <path_to_file>
. Podobnie pliki te muszą zostać udostępnione do testów przy użyciu argumentu data
reguły py_test
BUILD. Użyj funkcji location
, aby wygenerować poprawną odpowiednią ścieżkę względną:
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",
],
...
)
Zgodnie z konwencją, złote pliki powinny być umieszczone w katalogu rodzeństwa o tej samej nazwie, co ich cel testowy, z przyrostkiem _goldens
:
path/
to/
some_test.py
some_test_goldens/
test_case_one.expected
...
test_case_last.expected
Jak zaktualizować pliki .expected
?
.expected
pliki można zaktualizować, uruchamiając docelowy test, którego dotyczy problem, z argumentami --test_arg=--update_goldens --test_strategy=local
. Powstałą różnicę należy sprawdzić pod kątem nieprzewidzianych zmian.