```
Test Creation:
[ ] Step 1: Discover the test project conventions
[ ] Step 2: Identify testable data access artifacts
[ ] Step 3: Create seed data
[ ] Step 4: Write test cases
[ ] Step 5: Review determinism
```
**Step 1: Discover the test project conventions**
Read the base test class, seed manager, and project file to understand inheritance patterns, transaction management, and seed file conventions.
**Step 2: Identify testable data access artifacts**
Scope to the target project only. List data access methods that interact with the database — repositories, DAOs, stored procedure callers, query builders.
**Step 3: Create seed data**
Follow seed file location and naming conventions from the existing project.
Reuse existing seed files when possible.
Avoid `TRUNCATE TABLE` — keep existing database data intact.
Do not commit seed data; tests run in transactions that roll back.
Ensure seed data does not conflict with other tests.
Load and verify seed data before assertions depend on it.
**Step 4: Write test cases**
Inherit from the base test class to get automatic transaction create/rollback.
Assert logical outputs (rows, columns, counts, error types), not platform-specific messages.
Assert specific expected values — never assert that a value is merely non-null or non-empty when a concrete value is available from seed data.
Avoid testing code paths that do not exist or asserting behavior that cannot occur.
Avoid redundant assertions across tests targeting the same method.
**Step 5: Review determinism**
Re-examine every assertion against non-null values. Confirm each is deterministic against the seeded data. Fix any assertion that depends on database state outside the test's control.