Золотое тестирование

TFF включает небольшую библиотеку golden , которая позволяет легко писать и поддерживать золотые тесты.

Что такое золотые тесты? Когда мне следует их использовать?

Золотые тесты используются, когда вы хотите, чтобы разработчик знал, что его код изменил выходные данные функции. Они нарушают многие характеристики хороших модульных тестов, поскольку обещают точные результаты функций, а не тестируют определенный набор четких, документированных свойств. Иногда неясно, когда «ожидается» изменение золотого результата или оно нарушает какое-то свойство, которое золотой тест призван обеспечить. Таким образом, хорошо продуманный модульный тест обычно предпочтительнее «золотого теста».

Однако «золотые тесты» могут быть чрезвычайно полезны для проверки точного содержания сообщений об ошибках, диагностики или сгенерированного кода. В таких случаях «золотые тесты» могут оказаться полезной проверкой уверенности в том, что любые изменения в сгенерированных выходных данных «выглядят правильно».

Как мне писать тесты с использованием golden ?

golden.check_string(filename, value) — это основная точка входа в golden библиотеку. Он проверит строку value на соответствие содержимому файла, последний элемент пути которого — filename . Полный путь к filename должен быть указан через аргумент командной строки --golden <path_to_file> . Аналогично, эти файлы должны быть доступны для тестов с использованием аргумента data правила py_test BUILD. Используйте функцию location , чтобы сгенерировать правильный относительный путь:

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

По соглашению, файлы Golden должны быть помещены в родственный каталог с тем же именем, что и их тестовая цель, с суффиксом _goldens :

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

Как обновить .expected файлы?

.expected файлы можно обновить, запустив затронутую тестовую цель с аргументами --test_arg=--update_goldens --test_strategy=local . Полученный результат следует проверить на наличие непредвиденных изменений.