Test-First Development Skill
Test-First Development (TDD) ensures that code is written to satisfy specific, predefined requirements, leading to higher quality and better design.
TDD Workflow
-
Red: Write a failing test for a small piece of functionality.
-
Green: Write the minimum amount of code required to make the test pass.
-
Refactor: Clean up the code while ensuring the tests remain green.
Test Design Principles
- Comprehensive Coverage
-
Normal Cases: Test the expected "happy path" behavior.
-
Boundary Values: Test inputs at the edges of valid ranges (e.g., 0, max_int, empty strings).
-
Edge Cases: Test unusual or extreme conditions (e.g., network timeout, disk full, null values).
-
Error Handling: Verify that the system fails gracefully and returns appropriate error messages.
- Structure (Arrange-Act-Assert)
Follow the AAA pattern for clear and maintainable tests:
-
Arrange: Set up the necessary preconditions and inputs.
-
Act: Execute the function or method being tested.
-
Assert: Verify that the outcome matches the expectation.
Best Practices
-
One Assertion per Test: Aim to test a single concept per test case.
-
Descriptive Naming: Name tests clearly (e.g., test_should_reject_invalid_api_key ).
-
Independence: Ensure tests do not depend on each other or on a specific execution order.
-
Fast Execution: Keep unit tests fast to encourage frequent execution.