otrzymaniem kodu Pythona:Jak używać Pythona Mock podnieść wyjątek - ale z errno wartość danej wartości
elif request.method == 'DELETE':
try:
os.remove(full_file)
return jsonify({'results':'purged %s' % full_file})
except OSError as e:
if e.errno != errno.ENOENT:
raise
return jsonify({'results':'file not present: %s' % full_file})
Chcę przetestować wszystkie możliwe ścieżki, w tym obsługę wyjątków. Korzystanie Mock, jest to dość łatwe do podbiciem wyjątek, który mam zrobić z tym kodem:
with patch('os.remove', new=Mock(side_effect=OSError(errno.ENOENT))):
self.assertRaises(OSError, self.app.delete, file_URL) # broken
Mock podnosi wyjątek, który ma wydrukowaną wartość 2 (ENOENT) - ale e.errno jest ustaw na BRAK. Do tej pory nie znalazłem sposobu, aby to ustawić. Wynikiem jest, że wyjątek zawsze dostaje ponownie podniesiony, a ja nigdy nie osiągam ostatniego wiersza kodu w moim teście jednostki.
Próbowałem również stworzyć klasę dummy z zestawem errno i zwróciłem to. Ale jeśli nie ma ustawionego * side_effect *, to nie wywołuje wyjątku, a kiedy ustawię side_effect, nie otrzymam object.errno jako wartości zwracanej.
Czy istnieje sposób na podniesienie wyjątku, gdy obiekt wyjątku ma ustawiony atrybut errno?
Wow, to było szybko - i prawidłowe. :) Czy było to gdzieś w dokumentach Python's Exception? Czytałem je, ale mogłem coś przeoczyć. –
@JohnC, podniosłem OSError celowo i zaznaczyłem atrybut 'args' obiektu wyjątku. – falsetru
Interesujące - jak ustaliłeś, że jednym z "argumentów" było 'errno'? Patrzę na to, to po prostu wydaje się krotka. –