Salary Component tests fail intermittently because they use hard-coded names ("Uang Bensin", "Uang Denda Harian") that conflict with existing data from previous runs.
- Run 1: Create & Edit fail (names already exist), Delete succeeds
- Run 2: Edit succeeds (target name now available), Delete succeeds
- Run 3: All succeed (system finally clean)
Tests have sequential dependencies and no automated cleanup:
- Scenario 001: Creates "Uang Bensin"
- Scenario 002: Edits "Uang Bensin" → "Uang Denda Harian" (UPDATE)
- Scenario 003: Deletes "Uang Denda Harian"
Implement test independence with dynamic data:
// Generate unique names
$"Test_Salary_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{Guid.NewGuid():N}"- Dynamic test data (eliminate hard-coded names)
- AfterScenario cleanup hooks (automated data deletion)
- Self-contained scenarios (each creates its own test data)
- BeforeScenario validation (ensure clean starting state)
✅ Tests run in any order ✅ Parallel execution support ✅ Reliable, consistent results ✅ Easy debugging and maintenance
- Phase 1: 1-2 days (basic fixes)
- Phase 2: 3-5 days (robust implementation)
- Phase 3: 1 week (full independence)
Full analysis: https://gist.github.com/jeje-andal/af0c21bfab9cdec4056cc170f7d84fbf