Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Use this skill when writing tests for Smart Farming use cases, utilities, or entities. The project uses pytest with pytest-describe for BDD-style structure and mock repositories for isolation.
Test File Structure
Location
Use case tests: src/app/core/use_cases/{domain}/tests/{use_case_name}_test.py
Common utility tests: src/app/core/commons/tests/{utility_name}_test.py
Mocks: src/app/core/use_cases/tests/mocks/
Template
import pytest
from core.use_cases.{domain}.{use_case_name} import {UseCaseClass}
from core.use_cases.tests.mocks.repositories import Mock{Domain}Repository
# import other mocks as neededdefdescribe_{use_case_name}():
@pytest.fixturedefmock_repository():
return Mock{Domain}Repository()
@pytest.fixturedefuse_case(mock_repository):
return {UseCaseClass}(repository=mock_repository)
defshould_succeed_when_valid_input(use_case, mock_repository):
# Arrange# ... set up test data in mock repository# Act
result = use_case.execute(params)
# Assertassert result isnotNone# ... specific assertionsdefshould_raise_error_when_invalid_input(use_case):
# Arrange & Act & Assertwith pytest.raises(ExpectedError):
use_case.execute(invalid_params)
defshould_handle_empty_data(use_case, mock_repository):
# Test edge case with no data
result = use_case.execute(params)
assert result == expected_empty_result
Mock Repository Pattern
Mocks are in-memory implementations of repository interfaces:
classMockPlantsRepository:
def__init__(self):
self._plants = []
deffind_all(self):
returnself._plants
deffind_by_id(self, plant_id):
returnnext((p for p inself._plants if p.id == plant_id), None)
defcreate(self, plant):
self._plants.append(plant)
defupdate(self, plant):
self._plants = [p if p.id != plant.idelse plant for p inself._plants]
defdelete(self, plant_id):
self._plants = [p for p inself._plants if p.id != plant_id]
Test Scenarios to Cover
For each use case, generate tests for:
Happy path — Valid input produces expected output
Invalid input — Missing or malformed data raises appropriate error
Empty state — Behavior when no data exists
Edge cases — Boundary values, maximum lengths, special characters
Authorization — Verify that protected actions check permissions
Side effects — Verify data is persisted/deleted in the repository
Running Tests
# All tests
pytest
# Specific domain
pytest src/app/core/use_cases/plants/tests/
# Specific test file
pytest src/app/core/use_cases/sensors_records/tests/create_sensor_record_test.py
# Verbose with output
pytest -v -s
# Stop on first failure
pytest -x