Testing
Юнит-тесты для проекта Trans for Doctors.
Структура
tests/
├── __init__.py # Базовые тесты проекта
├── test_knowledge_base.py # Тесты Knowledge Base
├── test_stt.py # Тесты STT модуля
└── README.md # Этот файл
Установка pytest
pip install pytest pytest-cov
Запуск тестов
Все тесты
pytest tests/
Конкретный модуль
pytest tests/test_knowledge_base.py
pytest tests/test_stt.py
С подробным выводом
pytest tests/ -v
С покрытием кода
pytest --cov=. tests/
Только быстрые тесты (пропустить медленные)
pytest tests/ -m "not slow"
Текущее покрытие
- ✅ Knowledge Base: MedicalTermManager, загрузка/сохранение терминов
- ✅ STT: Audio Processor (resample, duration)
- ✅ Project Structure: проверка структуры проекта
- ⏳ LLM Corrector: требует mock OpenAI API
- ⏳ Pipeline: требует интеграционные тесты
- ⏳ Report Generator: требует проверку DOCX
Добавление новых тестов
Пример теста для нового модуля
"""
Tests for MyModule
"""
import pytest
from my_module import MyClass
class TestMyClass:
"""Tests for MyClass"""
def test_initialization(self):
"""Test basic initialization"""
obj = MyClass()
assert obj is not None
def test_some_method(self):
"""Test some method"""
obj = MyClass()
result = obj.some_method()
assert result == expected_value
if __name__ == "__main__":
pytest.main([__file__, "-v"])
CI/CD Integration
GitHub Actions
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest pytest-cov
- name: Run tests
run: pytest tests/ --cov=. --cov-report=xml
Mock данные
Для тестирования без реальных файлов используйте tempfile:
import tempfile
from pathlib import Path
def test_with_temp_file():
with tempfile.NamedTemporaryFile(mode='w', delete=False) as f:
f.write("test data")
temp_file = Path(f.name)
try:
# Ваш тест
pass
finally:
temp_file.unlink() # Удалить файл
Пропуск тестов
Пропустить если условие не выполнено
@pytest.mark.skipif(not model_exists(), reason="Model not found")
def test_requires_model():
pass
Отметить как медленный
@pytest.mark.slow
def test_slow_operation():
pass
Fixtures
Общий fixture для всех тестов
@pytest.fixture
def medical_terms_manager():
"""Fixture providing MedicalTermManager instance"""
manager = MedicalTermManager()
manager.add_term("МРТ")
manager.add_term("КТ")
return manager
def test_using_fixture(medical_terms_manager):
assert len(medical_terms_manager.terms) == 2
Troubleshooting
Модуль не найден
Убедитесь, что проект в PYTHONPATH:
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
Тесты не находятся
Проверьте именование:
- Файлы должны начинаться с
test_ - Классы должны начинаться с
Test - Методы должны начинаться с
test_
Зависимости для тестов
Некоторые тесты требуют:
- Model files (для STT тестов)
- OpenAI API key (для LLM тестов)
- Аудио файлы (для интеграционных тестов)
Используйте pytest.skip() если ресурсы недоступны.