Prueba dorada

TFF incluye una pequeña biblioteca llamada golden que facilita la escritura y el mantenimiento de pruebas golden.

¿Qué son las pruebas de oro? ¿Cuándo debo usarlos?

Las pruebas de oro se utilizan cuando desea que un desarrollador sepa que su código alteró el resultado de una función. Violan muchas características de las buenas pruebas unitarias porque hacen promesas sobre los resultados exactos de las funciones, en lugar de probar un conjunto específico de propiedades claras y documentadas. A veces no está claro cuándo se "espera" un cambio en una salida de oro o si se está violando alguna propiedad que la prueba de oro pretendía hacer cumplir. Como tal, una prueba unitaria bien factorizada suele ser preferible a una prueba de oro.

Sin embargo, las pruebas de oro pueden resultar extremadamente útiles para validar el contenido exacto de los mensajes de error, los diagnósticos o el código generado. En estos casos, las pruebas de oro pueden ser una prueba de confianza útil para comprobar que cualquier cambio en el resultado generado "se ve bien".

¿Cómo debo escribir pruebas usando golden ?

golden.check_string(filename, value) es el punto de entrada principal a la biblioteca golden . Comparará la cadena value con el contenido de un archivo cuyo último elemento de ruta sea filename . La ruta completa al filename debe proporcionarse mediante un argumento de línea de comando --golden <path_to_file> . De manera similar, estos archivos deben estar disponibles para las pruebas utilizando el argumento data de la regla py_test BUILD. Utilice la función location para generar una ruta relativa adecuada y correcta:

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

Por convención, los archivos dorados deben colocarse en un directorio hermano con el mismo nombre que su objetivo de prueba, con el sufijo _goldens :

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

¿Cómo actualizo los archivos .expected ?

Los archivos .expected se pueden actualizar ejecutando el objetivo de prueba afectado con los argumentos --test_arg=--update_goldens --test_strategy=local . La diferencia resultante debe comprobarse para detectar cambios imprevistos.