mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 08:46:22 +02:00
34 lines
586 B
Markdown
34 lines
586 B
Markdown
|
|
# Interface Design for Testability
|
||
|
|
|
||
|
|
Good interfaces make testing natural:
|
||
|
|
|
||
|
|
1. **Accept dependencies, don't create them**
|
||
|
|
```python
|
||
|
|
# Testable
|
||
|
|
def process_order(order, payment_gateway):
|
||
|
|
pass
|
||
|
|
|
||
|
|
# Hard to test
|
||
|
|
def process_order(order):
|
||
|
|
gateway = StripeGateway()
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
|
||
|
|
2. **Return results, don't produce side effects**
|
||
|
|
```python
|
||
|
|
# Testable
|
||
|
|
def calculate_discount(cart) -> float:
|
||
|
|
return discount
|
||
|
|
|
||
|
|
# Hard to test
|
||
|
|
def apply_discount(cart) -> None:
|
||
|
|
cart.total -= discount
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
|
||
|
|
3. **Small surface area**
|
||
|
|
* Fewer methods = fewer tests needed
|
||
|
|
* Fewer params = simpler test setup
|