Teste Dourado

O TFF inclui uma pequena biblioteca chamada golden que facilita escrever e manter testes de ouro.

O que são testes de ouro? Quando devo usá-los?

Os testes de ouro são usados ​​quando você deseja que um desenvolvedor saiba que seu código alterou a saída de uma função. Eles violam muitas características de bons testes de unidade, pois fazem promessas sobre as saídas exatas das funções, em vez de testar um conjunto específico de propriedades claras e documentadas. Às vezes, não é claro quando uma alteração em uma saída de ouro é "esperada" ou se está violando alguma propriedade que o teste de ouro tentou impor. Como tal, um teste de unidade bem fatorado é geralmente preferível a um teste de ouro.

No entanto, os testes de ouro podem ser extremamente úteis para validar o conteúdo exato de mensagens de erro, diagnósticos ou código gerado. Nesses casos, os testes de ouro podem ser uma verificação útil de confiança de que quaisquer alterações na saída gerada "parecem corretas".

Como devo escrever testes usando golden ?

golden.check_string(filename, value) é o ponto de entrada primário na biblioteca golden . Ele verificará a string de value em relação ao conteúdo de um arquivo cujo último elemento de caminho é filename . O caminho completo para o nome do filename deve ser fornecido por meio de um argumento --golden <path_to_file> linha de comando. Da mesma forma, esses arquivos devem ser disponibilizados para testes usando o argumento data para a regra py_test BUILD. Use a função de location para gerar um caminho relativo apropriado correto:

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 convenção, os arquivos golden devem ser colocados em um diretório irmão com o mesmo nome de seu destino de teste, sufixado com _goldens :

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

Como faço para atualizar arquivos .expected ?

Os arquivos .expected podem ser atualizados executando o destino de teste afetado com os argumentos --test_arg=--update_goldens --test_strategy=local . A diferença resultante deve ser verificada quanto a alterações imprevistas.