Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/en-snapshot/federated/golden_tests.md
25115 views

Golden Testing

TFF includes a small library called golden that makes it easy to write and maintain golden tests.

What are golden tests? When should I use them?

Golden tests are used when you want a developer to know that their code altered the output of a function. They violate many characteristics of good unit tests in that they make promises about the exact outputs of functions, rather than testing a specific set of clear, documented properties. It's sometimes not clear when a change to a golden output is "expected" or whether it is violating some property that the golden test saught to enforce. As such, a well-factored unit test is usually preferable to a golden test.

However, golden tests can be extremely useful for validating the exact contents of error messages, diagnostics, or generated code. In these cases, golden tests can be a helpful confidence check that any changes to the generated output "look right."

How should I write tests using golden?

golden.check_string(filename, value) is the primary entrypoint into the golden library. It will check the value string against the contents of a file whose last path element is filename. The full path to filename must be provided via a commandline --golden <path_to_file> argument. Similarly, these files must be made available to tests using the data argument to the py_test BUILD rule. Use the location function to generate a correct appropriate relative path:

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

By convention, golden files should be placed in a sibling directory with the same name as their test target, suffixed with _goldens:

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

How do I update .expected files?

.expected files can be updated by running the affected test target with the arguments --test_arg=--update_goldens --test_strategy=local. The resulting diff should be checked for unanticipated changes.