Thants hat geschrieben: Mittwoch 23. Dezember 2020, 21:41
@pyko: Wie lässt du eigentliche die Tests laufen (mit welchem Kommando und von welchem Verzeichnis aus)?
Ich starte alles direkt vom Hauptverzeichnis, also Repository-Root. Sowohl pytest, python -m pythest, coverage ... usw. funktionieren.
Der pytest findet das conftest.py und nimmt das als "root" für die Tests. In der conftest.py wird dann der syspath wie vorgeschlagen geändert. Als Basis für das resolve() scheint aber immernoch das Repo-Root zu dienen, denn ich füge da nur "src" hinzu. Mit diesem Setup brauche ich dann weder in den Tests noch in den Sourcen den "src" prefix bei den Imports. Würde ich die Tests von /tests/ aus starten, muß ich in die conftest.py ein "../src" rein.
Thants hat geschrieben: Mittwoch 23. Dezember 2020, 21:41
Ausserdem müsste dann src ein Paket sein, d.h. dort müsste eine Datei __init__.py liegen
Das soll man vermeiden. Hier widersprechen sich diverse Dokus (die sagen, ja) und die Foren (sagen nein). Die App bzw src hat bei mir aktuell kein __init__.py mehr, und das funktioniert. Im src liegt nur das app.py.
Thants hat geschrieben: Mittwoch 23. Dezember 2020, 21:41
(wobei ich gerade nach einem kurzen Test feststelle, dass Python 3 tatsächlich auch ein "nacktes" Verzeichnis als Paket akzeptiert. Seit wann ist das denn so?
Scheinbar Python 3.3:
https://www.python.org/dev/peps/pep-0420/
Dadurch ich ganz neu eingestiegen bin, bin ich gleich mit 3.9 gestartet. Hätte ich wohl auch hier gleich schreiben sollen. Man muß ziemlich aufpassen, auf welche Version sich die Dokus und Foreneinträge beziehen. Hat sich wohl viel geändert.
Thants hat geschrieben: Mittwoch 23. Dezember 2020, 21:41
Wenn das test-Verzeichnis ein eigenes Paket ist, wäre das Verzeichnis test/mod1 auch separat von src/mod1. In Pythons Import-Namespace wäre das eine dann test.mod1 und das andere einfach nur mod1. (Wobei test/mod1 ja eigentlich sowieso gar kein Paket sein sollte, wenn da keine __init__.py liegt, aber da scheint es ja in Python 3 Änderungen gegeben zu haben, die mir nicht geläufig sind (wie oben schon erwähnt)).
Hätte ich auch erwartet, aber wie oben beschrieben, starten mit meinem Setup beide Bäume ohne das "src" und das "tests". In meinem richtigen Projekt heißen die Module dann einfach anders, immer test_...py und das Problem ist gelöst.
Im großen und ganzen finde ich das Setup jetzt ganz gut. Eins meiner größten Probleme im Sourcecode sind rekursive imports, die finde ich hiermit ganz gut.
Schöne Feiertage!