# Testing Basics — Python Fundamentals: From Basics to Async

Source: https://www.skillbyai.com/en/python/py-testing-basics

> Write small automated tests with pytest and assert statements, with clear names that pinpoint failures.

## A first pytest test

`pytest` finds any function starting with `test_` and runs it. Plain `assert` statements express what should be true.

```python
# calc.py
def add(a, b):
    return a + b

# test_calc.py
from calc import add

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0
```

Output:

```
$ pytest
1 passed in 0.01s
```

## What makes a good test

Good tests are small, check **one** behaviour, and use clear names like `test_add_negative_numbers` so a failure tells you exactly what broke.
