Prueba de oro

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 doradas 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 en el sentido de que 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 dorada o si se está violando alguna propiedad que la prueba dorada pretendía aplicar. Como tal, una prueba unitaria bien factorizada suele ser preferible a una prueba dorada.

Sin embargo, las pruebas doradas pueden ser 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 verificación de confianza útil de que cualquier cambio en la salida generada "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 de value con el contenido de un archivo cuyo último elemento de ruta es filename . La ruta completa al nombre del filename debe proporcionarse a través de un argumento de línea de comando --golden <path_to_file> . De manera similar, estos archivos deben estar disponibles para las pruebas usando el argumento de data para la regla BUILD de py_test . Utilice la función de location para generar una ruta relativa adecuada 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 destino 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 verificarse en busca de cambios imprevistos.