Ziel: Jedes Tool bekommt umfassende Unit Tests, damit Code-Änderungen verifiziert werden können.
Status: ✅ DONE (2026-06-02) Aufwand: ~20 Minuten pro Tool = ~2.5 Stunden total
Standard Go testing package (testing).
func TestDiscoverJSON(t *testing.T) {
// Test code
}Run mit: go test ./...
- TestDiscoverJSON — Valide Pfad → JSON Array
- TestDiscoverSortByRelevance — Sortierung nach Score
- TestDiscoverSortByName — Alphabetische Sortierung
- TestDiscoverMaxResults — Truncation
- TestDiscoverNonExistentPath — JSON Error (nicht plain text)
- TestDiscoverTotalMatches — Korrekte Anzahl vor Truncation
- TestExecuteSimple —
echo hello→ output - TestExecuteTimeout — Blockierender Command → Timeout Error
- TestExecuteSecretRedaction —
curl -H "Authorization: Bearer abc123" ...→ REDACTED - TestExecuteEnvVarRedaction —
$MY_SECRET→ REDACTED - TestExecuteErrorField — Failing command →
error: "..." - TestExecuteDurationMs — Float64 mit Millisekunden
- TestMapBasic — Valide Pfad → Module Map
- TestMapNonExistentPath — JSON Error
- TestMapModuleEdges — Module-level Dependencies
- TestMapDependencyGraph — Vollständiger Graph
- TestGraspFile — Valide Datei → Struktur
- TestGraspFileAlias —
filestattfile_path - TestGraspNonExistentFile — JSON Error
- TestGraspRelatedFiles — Related Files Output
- TestScoutRegex —
func.*main→ Matches - TestScoutVenvExclusion —
.venvundvenvignoriert - TestScoutSummary —
summaryField vorhanden - TestScoutDurationMs — Float64 Millisekunden
- TestHarvestSuccess — 200 → status: 200, body: "..."
- TestHarvest404 — 404 → status: 404, kein error
- TestHarvestInvalidURL — JSON Error
- TestHarvestStatusField —
statusField vorhanden
- TestOrchestrateAdd — Task hinzufügen
- TestOrchestrateList — Alle Tasks
- TestOrchestrateIdShorthand —
-idstatt-task_id - TestOrchestratePlanField —
planField vorhanden - TestOrchestrateRollbackField —
rollbackField vorhanden - TestOrchestrateDependencies —
dependenciesArray parsing - TestOrchestrateTags —
tagsArray parsing - TestOrchestrateInvalidAction — JSON Error
pkg/tools/
├── discover_test.go
├── execute_test.go
├── map_test.go
├── grasp_test.go
├── scout_test.go
├── harvest_test.go
└── orchestrate_test.go
// pkg/tools/discover_test.go
package tools
import (
"encoding/json"
"os"
"path/filepath"
"testing"
)
func TestDiscoverJSON(t *testing.T) {
// Create temp directory with test files
tmpDir := t.TempDir()
testFile := filepath.Join(tmpDir, "test.py")
if err := os.WriteFile(testFile, []byte("print('hello')"), 0644); err != nil {
t.Fatal(err)
}
// Run discover
input := DiscoverInput{
Path: tmpDir,
Pattern: "**/*.py",
SortBy: "relevance",
MaxResults: 10,
Format: "json",
}
result, err := RunDiscover(input)
if err != nil {
t.Fatal(err)
}
// Parse result
var files []FileMetadata
if err := json.Unmarshal([]byte(result.JSON), &files); err != nil {
t.Fatalf("Invalid JSON: %v", err)
}
if len(files) != 1 {
t.Errorf("Expected 1 file, got %d", len(files))
}
if files[0].Path != testFile {
t.Errorf("Expected %s, got %s", testFile, files[0].Path)
}
}- Minimum: 70% coverage
- Target: 85% coverage
- Stretch: 95% coverage
- Erstelle
pkg/tools/discover_test.go - Erstelle
pkg/tools/execute_test.go - Erstelle
pkg/tools/map_test.go - Erstelle
pkg/tools/grasp_test.go - Erstelle
pkg/tools/scout_test.go - Erstelle
pkg/tools/harvest_test.go - Erstelle
pkg/tools/orchestrate_test.go - Run
go test ./...für jedes Tool - Run
go test -cover ./...für Coverage-Report - Füge Coverage-Threshold zu CI hinzu
- Pro Tool: 20 Minuten (2-3 Tests + Setup)
- Total: ~2.5 Stunden
- Plus Debugging: +30 Minuten
- Total: ~3 Stunden