Es ist nur ein Bulletin.
Das Wichtigste ist, ob Sie "aus ... importieren ..." können. Das Verzeichnis des selbst erstellten Moduls und Wenn beide Testmodul-Verzeichnishierarchien tief sind.
Es scheint, dass sich das Verhalten in 3 oder mehr Schichten ändert.
Der Beispielcode, wenn die Hierarchie tief ist, entspricht der folgenden Struktur: Ich konnte es nicht finden, selbst wenn ich es gegoogelt habe, also schrieb ich es als Artikel.
.
├tests
│├mod
││└test_module.py
├src
│├mod
││└module.py
Ich habe viele Dinge wie die folgenden gesehen.
.
├tests
│└test_module.py
├src
│└module.py
Was ich tun möchte ist Wie führe ich unittest mit pytest aus, um Modulcode und Testcode in Verzeichnissen zu trennen? Diese Methode erfordert jedoch die Angabe von Modulausführungsoptionen.
In launch.json
müssen Sie die Debug-Konfiguration aller Muster für die Anzahl der Module beschreiben.
Es scheint kein Problem zu geben, wenn es sich um ein kleines Projekt wie ein Tutorial handelt.
Je größer das Projekt, desto mehr Unsinn ist es.
Der Inhalt der Datei __init __. Py
ist leer.
Außerdem ist "__init __. Py" nicht erforderlich.
Auch hier funktioniert es gut ohne "__init __. Py", und die Intelligenz funktioniert.
Dies ist der eigentliche Test.
test_name.py
import pytest
from src.animal.mammal import human
from src.star import satellite
def test_human_name():
target=human("Jane Doe")
ans=target.name
assert ans=="Jane Doe"
def test_satellite_name():
target=satellite("lua")
ans=target.name
assert ans=="lua"
def test_human_foot_count():
ans=human.howmanyfoot()
assert ans==2
if __name__ == "__main__":
pass
star.py
class satellite():
def __init__(self, name:str):
self.name=name
def name(self) -> str:
return self.name
class planet():
def __init__(self, name:str):
self.name=name
def name(self) -> str:
return self.name
mammal.py
class human():
def __init__(self, name:str):
self.name=name
@classmethod
def name(self) -> str:
return self.name
@staticmethod
def howmanyfoot() -> int:
return 2
Dies ist eine Fehlerumgehung bei der Verarbeitung "vom Import" der "aktuellen Datei beim Debuggen". Wenn man dies ausdrückt, scheint es, dass es "Python-Pfad" und "selbst erstellte Module anderer Ebenen" erkennt.
.env
PYTHONPATH=./
Es erkennt auch, wenn Sie eine virtuelle Umgebung wie conda verwenden.
Wenn Sie das folgende Skript ausführen, Sie können sehen, ob die Umgebung erkannt wird.
import_test.py
import sys
print(sys.path)
Als Ergebnis der Ausführung der obigen import_test.py
,
Es ist in Ordnung, wenn . / Src /
enthalten ist.
Es werden drei Arten von Debugging-Methoden definiert. Von oben nach unten
--Testname Modul-Debugging
Meiner persönlichen Meinung nach ist das Debuggen von Modulen Es ist auf Anwendungen wie die Angabe des Hauptmoduls beschränkt.
In den meisten Fällen drücken Sie die Taste "F5" auf der Registerkarte, die bearbeitet wird, um die aktuelle Datei zu debuggen → Führen Sie den Test aus.
launch.json
{
//Mit IntelliSense können Sie die verfügbaren Attribute kennenlernen.
//Bewegen Sie den Mauszeiger und zeigen Sie die Beschreibung der vorhandenen Attribute an.
//Überprüfen Sie das Folgende für weitere Informationen: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python:Modultest_name",
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}",
"module": "tests.test_mod.test_name"
},{
"name": "Python:Modul Säugetier",
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}",
"module": "src.animal.mammal"
},
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
settings.json
{
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pytestEnabled": true,
"python.envFile": "${workspaceFolder}/.env"
}
Wenn Sie genau hinschauen, können Sie sehen, dass der Speicherort von ".env" standardmäßig angegeben ist.
Conda
wird bis zu" Isolierung der virtuellen Umgebung "und" Installation von Python in der virtuellen Umgebung "verwendet.
Die Bibliotheksinstallation in der virtuellen Umgebung verwendet "pip".Excelsior!
Recommended Posts