Ich habe ein Python-Modul erstellt, um Wetterdaten (Breitengrad, Längengrad, Elevation und andere Details) zu generieren, indem bestimmte Orte als Eingabe genommen werden.Python Unit Test mit Doctest funktioniert nicht wie erwartet
Aktualisierte es wie Standards und "pycodestyle" Paket zur Überprüfung der PEP8 Standards wirft keine Fehler oder Warnungen.
My-Code ist unten angegeben:
def fetch_location_info(input_list, err_file):
# URL which gives us Latitude, Longitude values
LatLong_URL = (
'http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
)
# URL which gives us Elevation values
Elevation_URL = (
'https://maps.googleapis.com/maps/api/elevation/json?locations='
)
# Initializing Error Logs with relevant title for writing error records
err_line_header = "Logging Location Data Errors"
print(err_line_header, file=err_file)
# Insert a new line in the error file after the Error Header
print("\n", file=err_file)
# Fetch and Extract Location details from google maps
input_info = []
for location in input_list:
temp_info = {'Location': location}
latlong_response = requests.get(LatLong_URL + location).json()
if latlong_response.get('results'):
for latlong_results in latlong_response.get('results'):
latlong = (
latlong_results
.get('geometry', '0')
.get('location', '0')
)
temp_info['Latitude'] = latlong.get('lat', '0')
temp_info['Longitude'] = latlong.get('lng', '0')
elevation_response = requests.get(
Elevation_URL
+ str(temp_info['Latitude'])
+ ','
+ str(temp_info['Longitude'])
).json()
if elevation_response.get('results'):
for elevation_results in elevation_response.get('results'):
temp_info['Elevation'] = (
elevation_results.get('elevation', '0'))
input_info.append(temp_info)
break
else:
print("Elevation_URL is not fetching values for {}"
.format(location),
file=err_file
)
break
else:
print("LatLong_URL is not fetching values for {}"
.format(location),
file=err_file
)
print("\n", file=err_file)
return input_info
nun als nächster Schritt, ich versuche, Unit Testing mit doctest zu tun. Ich entschied mich, die Testfälle in einer separaten Datei zu behalten. Also habe ich folgende .txt Datei erstellt und im selben Verzeichnis wie der Code gespeichert.
This is a doctest based regression suite for Test_Weather.py
Each '>>' line is run as if in a python shell, and counts as a test.
The next line, if not '>>' is the expected output of the previous line.
If anything doesn't match exactly (including trailing spaces), the test fails.
>>> from Test_Weather import fetch_location_info
>>> fetch_location_info(["Sydney,Australia"], open('data/error_log.txt', 'w'))
print(input_info)
Wie oben zu sehen ist, sollte der erwartete Zustand zurück den Inhalt der Liste/Datenrahmen/Variable, die erstellt wird innerhalb der Funktion geprüft wird. Für einen Versuch habe ich versucht, da der erwartete Wert den Inhalt der Liste, aber meine Unit-Test-Ausgabe wirft Fehler wie unten nur zu drucken und bekam Wert passend nicht:
PS C: \ Benutzer \ JKC> Python -m doctest testcases.txt ******************************************** *************************** Datei "testcases.txt", Zeile 7, in testcases.txt Fehlgeschlagenes Beispiel: fetch_location_info (["Sydney , Australien "], open ('data/error_log.txt', 'w'))
Erwartet:
print(input_info)
Got:
[{'Location': 'Sydney,Australia', 'Latitude': -33.8688197, 'Longitude': 151. 2092955, 'Elevation': 24.5399284362793}]
Also hier, wie Sie, dass der Test Case funktionierte gut sehen können, aber da ich nicht in der Lage bin, den Inhalt der Liste zu drucken, es ist der Testfall fehlgeschlagen.
Meine Frage ist Wie kann ich den Inhalt der Liste im erwarteten Abschnitt der Einheit Testfall anzeigen?
Wenn ich nicht falsch liege, muss ich den Ausgangswert im erwarteten Abschnitt des Unit-Testfalls wörtlich erwähnen?
Alle Eingänge werden hilfreich sein
Ihr Testfall ist der wörtlichen Text erwarten 'print (input_info) '. – user2357112
Danke für Ihre Antwort @ user2357112 Das ist, wo ich geschlagen wurde. Ich habe den Testfall geschrieben, um den Inhalt der input_info-Liste zu drucken, aber es druckt den Inhalt nicht. Wie drucke ich die Inhalte? Irgendwelche Zeiger? – JKC
Bitte werfen Sie einen Blick auf den Inhalt der Unit Test-Falldatei für mehr Klarheit. Ich habe die Frage aktualisiert, um mehr Lesbarkeit zu haben – JKC