# Testing Python

> Python testing with pytest: fixtures, parametrize, mocking with unittest.mock, and coverage

- **Type:** Skill
- **Install:** `agentstack add skill-ucdavis-ai-skills-registry-testing-python`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [ucdavis](https://agentstack.voostack.com/s/ucdavis)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [ucdavis](https://github.com/ucdavis)
- **Source:** https://github.com/ucdavis/ai-skills-registry/tree/main/skills/testing-python

## Install

```sh
agentstack add skill-ucdavis-ai-skills-registry-testing-python
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Testing — Python

## Framework
- **pytest** for all projects. Avoid `unittest` for new code.
- Run: `pytest` / `pytest --cov=src --cov-report=term-missing`

## File Conventions
- Test files: `tests/test_.py` or co-located `src/utils/test_format.py`.
- Conftest: shared fixtures in `tests/conftest.py`.

## Test Structure
```python
def test_format_date_returns_iso_string_for_valid_date():
    # Arrange
    date = datetime(2026, 1, 15)

    # Act
    result = format_date(date)

    # Assert
    assert result == "2026-01-15"
```

## Fixtures
```python
# conftest.py
@pytest.fixture
def db_session():
    session = create_test_session()
    yield session
    session.rollback()
    session.close()

# test file
def test_user_created(db_session):
    user = create_user(db_session, name="Alice")
    assert user.id is not None
```

## Parametrize
```python
@pytest.mark.parametrize("value,expected", [
    ("", True),
    ("  ", True),
    ("hello", False),
])
def test_is_blank(value, expected):
    assert is_blank(value) == expected
```

## Mocking
```python
from unittest.mock import patch, MagicMock

def test_sends_email_on_signup(mock_smtp):
    with patch("myapp.mailer.smtplib.SMTP") as mock_smtp:
        send_welcome_email("user@example.com")
        mock_smtp.return_value.sendmail.assert_called_once()
```

## Coverage Targets
- Business logic: 85%+ branch coverage.
- Run `pytest --cov` in CI; fail below threshold with `--cov-fail-under=80`.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ucdavis](https://github.com/ucdavis)
- **Source:** [ucdavis/ai-skills-registry](https://github.com/ucdavis/ai-skills-registry)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-ucdavis-ai-skills-registry-testing-python
- Seller: https://agentstack.voostack.com/s/ucdavis
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
