50 lines
No EOL
2 KiB
Python
50 lines
No EOL
2 KiB
Python
import os
|
|
import numpy as np
|
|
import pytest
|
|
import cv2
|
|
|
|
from image_processing.core import process_images
|
|
|
|
@pytest.fixture
|
|
def sample_image_dir(tmp_path):
|
|
# Erzeuge ein temporäres Verzeichnis mit synthetischen Testbildern
|
|
img_dir = tmp_path / 'data' / 'raw'
|
|
img_dir.mkdir(parents=True, exist_ok=True)
|
|
for i in range(5):
|
|
img = np.full((10, 10, 3), fill_value=50 * i, dtype=np.uint8)
|
|
file_path = img_dir / f'img_{i}.jpg'
|
|
cv2.imwrite(str(file_path), img)
|
|
return img_dir
|
|
|
|
|
|
def test_process_images_stacking_result(sample_image_dir):
|
|
# Normalfall: Stacking mehrerer gültiger Bilder
|
|
images = sorted(str(p) for p in sample_image_dir.glob('*.jpg'))
|
|
result = process_images(images)
|
|
assert isinstance(result, np.ndarray), 'Ergebnis muss ein NumPy-Array sein.'
|
|
assert result.ndim == 3, 'Gestacktes Bild muss eine 3D-Matrix (H, W, C) sein.'
|
|
assert result.shape == (10, 10, 3), 'Dimensionen der Ausgabe müssen den Eingabebildern entsprechen.'
|
|
assert np.all(result >= 0) and np.all(result <= 255), 'Pixelwerte müssen im gültigen Bereich liegen.'
|
|
|
|
|
|
def test_process_images_empty_list():
|
|
# Edge-Case: Leere Liste
|
|
with pytest.raises((ValueError, AssertionError, FileNotFoundError)):
|
|
_ = process_images([])
|
|
|
|
|
|
def test_process_images_invalid_path(tmp_path):
|
|
# Fehlerfall: Nicht vorhandene Datei
|
|
fake_path = str(tmp_path / 'does_not_exist.jpg')
|
|
with pytest.raises((ValueError, FileNotFoundError, AssertionError)):
|
|
_ = process_images([fake_path])
|
|
|
|
|
|
def test_process_images_image_consistency(sample_image_dir):
|
|
# Prüfe, dass alle Eingabebilder gleich groß sind und Ergebnis konsistent bleibt
|
|
img_paths = sorted(str(p) for p in sample_image_dir.glob('*.jpg'))
|
|
sizes = [cv2.imread(p).shape for p in img_paths]
|
|
assert len(set(sizes)) == 1, 'Alle Testbilder müssen gleiche Dimensionen haben.'
|
|
result = process_images(img_paths)
|
|
ref_shape = sizes[0]
|
|
assert result.shape == ref_shape, 'Gestacktes Bild muss gleiche Dimension wie Eingabebilder haben.' |