Add measurement_logging/tests/test_core.py

This commit is contained in:
Mika 2026-01-18 16:37:02 +00:00
parent 78111432a8
commit 9246676a95

View file

@ -0,0 +1,110 @@
import csv
import tempfile
from pathlib import Path
import pytest
# Da tested_module null ist, importiere direkt aus dem Paketnamen
from measurement_logging import core
def test_log_measurement_creates_csv_with_correct_columns():
headers = ["time", "temperature", "humidity", "iso", "exposure", "rms_noise"]
with tempfile.TemporaryDirectory() as tmpdir:
csv_path = Path(tmpdir) / "measurements.csv"
# Aufruf der Funktion mit Dummy-Werten
core.log_measurement(
time="22:30:00",
temperature=12.5,
humidity=80.2,
iso=1600,
exposure=1.25,
rms_noise=0.003
)
# Im vorgesehenen Pfad überprüft die Funktion, ob Datei existiert
# Test simuliert durch Schreiben in tmpdir
core.log_measurement(
time="22:30:00",
temperature=12.5,
humidity=80.2,
iso=1600,
exposure=1.25,
rms_noise=0.003
)
# Nun manuelles Schreiben in csv_path, da Datei intern fest definiert sein könnte
# Wir prüfen Struktur und Inhalt
core.log_measurement(
time="22:31:00",
temperature=13.2,
humidity=79.5,
iso=1600,
exposure=1.0,
rms_noise=0.004
)
# Statt reale Datei, testen wir die Funktion separat mit lokaler CSV
with tempfile.NamedTemporaryFile(mode='w+', newline='', suffix='.csv') as tmp:
tmp_path = Path(tmp.name)
# Erstelle CSV über interne Funktion
core.csv_output_path = tmp_path # Falls Funktion dynamisch Pfad nutzt
core.log_measurement(
time="23:00:00",
temperature=10.0,
humidity=75.0,
iso=800,
exposure=2.0,
rms_noise=0.001
)
tmp.seek(0)
reader = csv.reader(tmp)
rows = list(reader)
assert rows[0] == headers, "CSV sollte Header mit korrekten Spaltennamen enthalten."
assert len(rows) == 2, "CSV sollte eine Kopfzeile und eine Datenzeile enthalten."
def test_log_measurement_appends_rows():
with tempfile.NamedTemporaryFile(mode='w+', newline='', suffix='.csv', delete=False) as tmp:
tmp_path = Path(tmp.name)
try:
# Erste Messung schreiben
core.log_measurement(
time="00:00:00",
temperature=5.0,
humidity=60.0,
iso=400,
exposure=1.2,
rms_noise=0.002
)
# Zweite Messung schreiben
core.log_measurement(
time="00:10:00",
temperature=6.0,
humidity=61.0,
iso=400,
exposure=1.1,
rms_noise=0.0018
)
# Lesen und prüfen
with open(tmp_path, newline='') as f:
reader = list(csv.reader(f))
# Header und zwei Datenzeilen erwartet
assert len(reader) >= 3, "Es sollten mindestens 2 Messzeilen plus Header geschrieben werden."
finally:
tmp_path.unlink(missing_ok=True)
def test_log_measurement_rejects_invalid_types():
with pytest.raises((TypeError, ValueError)):
core.log_measurement(
time=12345, # Sollte str sein
temperature="warm", # Sollte float sein
humidity=50.0,
iso=800,
exposure=1.0,
rms_noise=0.001
)