SurfSense/.cursor/skills/tdd/interface-design.md

586 B

Interface Design for Testability

Good interfaces make testing natural:

  1. Accept dependencies, don't create them
# Testable
def process_order(order, payment_gateway):
    pass

# Hard to test
def process_order(order):
    gateway = StripeGateway()

  1. Return results, don't produce side effects
# Testable
def calculate_discount(cart) -> float:
    return discount

# Hard to test
def apply_discount(cart) -> None:
    cart.total -= discount

  1. Small surface area
  • Fewer methods = fewer tests needed
  • Fewer params = simpler test setup