software-testing
- •When writing tests, avoid mocking too much otherwise your tests will be unmaintainable.
- •Always prefer one or two simple integration tests over a bunch of fully mocked unit tests.
- •Use real models and data structures whenever possible.
- •Print local variables to stdout on tests.
- •Except when they're going to be tested against a particular expected value.
- •e.g.:
print(f"{header_count=}")\nassert header_count == 1
- •e.g.:
- •Focus on inputs and outputs to make it easier to debug it when tests fail.
- •Except when they're going to be tested against a particular expected value.
- •Prefer running tests individually rather than the entire suite when facing errors.
- •Validate using models (e.g.: pydantic) instead of countless field-by-field assertions.
- •
data = MyDataModel(**obj)validates structure and types. - •then assert
data == expected_data.
- •
- •When testing file operations (reading/writing), use
tmp_pathfixture.- •Files are automatically cleaned up after the test.
- •When reading Excel/CSV files for comparison with Pydantic models:
- •Use
pd.read_excel(..., dtype=str, keep_default_na=False)to avoid type coercion issues. - •Pandas converts numeric strings to int/float and empty cells to NaN, breaking Pydantic validation.
- •Use
- •Do not bend prod code over backwards to make tests easier to write.
- •Unless that refactoring is beneficial for the prod code itself.