Back to Sanity

Interface Design for Testability

.agents/skills/tdd/interface-design.md

5.24.0650 B
Original Source

Interface Design for Testability

Good interfaces make testing natural:

  1. Accept dependencies, don't create them

    typescript
    // Testable
    function processOrder(order, paymentGateway) {}
    
    // Hard to test
    function processOrder(order) {
      const gateway = new StripeGateway()
    }
    
  2. Return results, don't produce side effects

    typescript
    // Testable
    function calculateDiscount(cart): Discount {}
    
    // Hard to test
    function applyDiscount(cart): void {
      cart.total -= discount
    }
    
  3. Small surface area

    • Fewer methods = fewer tests needed
    • Fewer params = simpler test setup