Aktywne Wpisy
BanderaFella +2
To mój pierwszy post na tym forum. Jestem Ukraińcem mieszkającym we Wrocławiu. Lubię to miasto, ponieważ tu jest wielu Ukraińców, czuję się jak w domu.
Nie do końca rozumiem was Polaków. Popełniacie przestępstwo rozsypując zboże na drodze. Nie macie empatii ani współczucia. Nasi ludzie umierają za was, a wy knujecie przeciwko nam i chcecie nas zniszczyć. My staramy się przetrwać i wygrać walkę z okupantem. Wy nam nie pomagacie, tylko wbijacie nóż
Nie do końca rozumiem was Polaków. Popełniacie przestępstwo rozsypując zboże na drodze. Nie macie empatii ani współczucia. Nasi ludzie umierają za was, a wy knujecie przeciwko nam i chcecie nas zniszczyć. My staramy się przetrwać i wygrać walkę z okupantem. Wy nam nie pomagacie, tylko wbijacie nóż
owocliczi +19
Mam bardzo prostą metodę w klasie:
def save_to_file(self, path):
try:
with open(path, 'w') as file:
file.write(json.dumps(self.data, indent=4))
except PermissionError:
print(f"no permissions to save the file in {path}")
Chcę odpalić unit test:
def test_write_to_file_without_permissions(self):
d = data_getter(LoadFromFile=True, data_path='data.json')
self.assertRaises(PermissionError, d.save_to_file, 'no_permissions_to_write/data.json')
Problem jest taki, że jeżeli zostawię blok except w metodzie, to wtedy unit test go nie łapie. Jeżeli wyrzucę nowy error w bloku except, to zaliczam test, ale sam program wtedy się będzie wywalać.
W jaki sposób mogę zachować block except, żeby test case wykrywał że dostałem w ryj wyjątkiem nieobsłużonym?
save_to_file
i złap go tam, gdzie wywołujesz tą metodędef testwritetofilewithoutpermissions(self, printmock)
...
printmock.assertcalled_once()
Żeby zrobić to jak człowiek printa zastąp loggiem i użyj caploga (nie wiem czy unittest wspiera), używaj pytesta
Jak dana klasa ma nie być reużywalna to dobry znak, że nie warto jej testować. Spróbój przetestować poziom wyżej, czyli funkcję/klasę, która jej używa. Często pisze się
A czy zrobienie czegoś takiego ma sens, jeżeli chcę poinformować użyszkodnika gdzie nastąpił, jaki błąd, czy wypieprzyc w ogóle ten block try-catch razem z logami?
try:
with open(path, 'w') as file:
file.write(json.dumps(self.data, indent=4))
except PermissionError:
logging.error(f"no permissions to save the file in {path}")
raise PermissionError
if os.access(path, os.W_OK)
cos co spowoduje np. w aplikacji desktopowej wyskoczenie okienka/wyraznego powiadomienia, ze nie udalo sie zapisac pliku, bo costam - nie ma uprawnien, sciezka zapisu nie istnieje, plik nie istnieje, gwiazdy sa zle ustawione etc. tak, zeby uzytkownik