Jak używać Pythona Mocka, aby zgłosić wyjątek - ale z Errno ustawionym na określoną wartość
Biorąc pod uwagę ten kod Pythona:
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. Używając Mocka, jest to łatwepodnieść wyjątek, który robię z tym kodem:
with patch('os.remove', new=Mock(side_effect=OSError(errno.ENOENT))):
self.assertRaises(OSError, self.app.delete, file_URL) # broken
Mock wywołuje wyjątek, który ma wydrukowaną wartość 2 (ENOENT) - alee.errno jest ustawiony na NONE. I jak dotąd nie znalazłem sposobu, aby to ustawić. Wynikiem tego jest zawsze wyjątekponownie podniesionyi nigdy nie docieram do ostatniej linii kodu w moim teście jednostkowym.
Próbowałem również utworzyć fikcyjną klasę z ustawionym errno i zwrócić ją. Ale chyba że ma on * side_effect * ustawiony do wywołania, nie zgłosi wyjątku, a kiedy ustawię side_effect, nie otrzymam object.errno jako wartości zwracanej.
Czy istnieje sposób, aby Mock wywołał wyjątek, w którym obiekt Exception maerrno zestaw atrybutów?