You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
2.9 KiB
Markdown

# Unit Testing Guide
This document provides a comprehensive guide for developers on how to use, write, and monitor unit tests in the `be-ircfa` project.
## 🚀 Getting Started
### Prerequisites
Before running tests, ensure you have the virtual environment activated and the required dependencies installed.
```bash
# 1. Activate the venv
source venv/bin/activate
# 2. Install test dependencies (if not already installed)
pip install pytest pytest-sugar pytest-cov pytest-html
```
## 🛠 Running Tests
We have simplified the testing process using a `Makefile` and `pytest`.
### 1. Simple Execution (With Progress Bar)
To run all tests with a premium progress bar and colorful monitoring:
```bash
make test
```
### 2. Manual Execution
If you prefer running `pytest` directly:
```bash
export PYTHONPATH=$PYTHONPATH:$(pwd)
pytest tests/unit-test/ --color=yes
```
### 3. Generating HTML Reports
To generate a detailed HTML report for post-analysis:
```bash
pytest tests/unit-test/ --html=report.html --self-contained-html
```
## 📊 Monitoring & Aesthetics
We use **`pytest-sugar`** to provide a better developer experience:
- **Real-time Progress**: A percentage bar shows the current status of the test suite.
- **Color Coding**: Instant visual feedback for passes (green) and failures (red).
- **Clearer Failures**: Detailed error messages are shown immediately.
## ✍️ Writing New Tests
All unit tests should be placed in `tests/unit-test/`. Follow these conventions:
- File names should start with `test_` (e.g., `test_auth.py`).
- Function names should start with `test_` (e.g., `def test_login_success():`).
- Use `pytest.mark.parametrize` for redundant test cases with different inputs.
**Example Template:**
```python
import pytest
from src.your_module import your_function
def test_your_feature():
result = your_function("input")
assert result == "expected_output"
```
---
## 🏗 CI/CD Integration
To ensure code quality, unit tests should be integrated into the deployment pipeline.
### Integration with Jenkins
Add a "Test" stage to your `Jenkinsfile` before the "Build Docker Image" stage:
```groovy
stage('Unit Tests') {
steps {
sh '''
source venv/bin/activate
export PYTHONPATH=${PYTHONPATH}:$(pwd)
make test
'''
}
}
```
### Integration with GitHub Actions
If using GitHub, create `.github/workflows/test.yml`:
```yaml
name: Unit Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-sugar
- name: Run Tests
run: |
export PYTHONPATH=$PYTHONPATH:$(pwd)
make test
```
---
*Maintained by the RCFA Backend Team.*