unitest problem z setUp i testowniem klasy

0

Witam serdecznie.

Uczę się Pythona i jako początkujący korzystam z książki PYTHON Instukcje dla programisty jestem w rozdziale 11 o testowaniu. Korzystam z unittest i mam problem z testowaniem klasy oraz metodą setUp(). Testowanie z palca działa dobrze, ale mam problem z testem jednostkowym. Może zacytuje treść zadania:

,,Przygotuj klasę o nazwie Employee. Metoda __init() powinna pobierać imię, nazwisko i roczne wynagrodzenie, a następnie zapisywać te informację w postaci atrybutów. Utwórz metodę o naziwe give_raise(), która spowoduje zwiększenie wynagrodzenia domyślnie o 5000 zł, choć zaakceptuje także inną kwotę.
Przygotuje zestaw testów dla klasy Employee. Utwórz dwie metody testowe test_give_default_raise() i test_give_custom_raise(). Wykorzystaj metodę setUp(), aby uniknąć konieczności tworzenia nowego egzemplarza klasy Employeew każdej metodzie testowej. Wykonaj zestaw testów i upewnij się, że oba testy zostaną zaliczone.''

A to co zrobiłem:
plik employee.py

class Employee():
    def __init__(self, first_name, last_name, amounts):
        self.first_name = first_name
        self.last_name = last_name
        self.amounts = amounts

    def give_raise(self, amount=5000):
        print(f"Twoja premia w tym roku wynosi {amount} zł")
        self.amounts += int(amount)
        print(f"Twoje wynagrodzenie w tym roku wynosi {self.amounts} zł")

#first_name = input('Podaj swoje imię: ')
#last_name = input('Podaj swoje nazwisko: ')
#amounts = int(input('Podaj swoje roczne wynagrodzenie: '))

#new_employe = Employee(first_name, last_name, amounts)
#amount = 2000
#new_employe.give_raise(amount)

plik z testem employe_unitest.py

import unittest
from employee import Employee

class TestEmoloyee(unittest.TestCase):

    def setUp(self):

        self.new_employee = Employee('Kamil', 'Kowalski', 50000)
        self.amount = 2000
        self.respons = [55000 ,52000]



    def test_give_default_raise(self):
        """test czy domyślne danie premii zwiększy roczne wynagrodzenie"""
        self.assertEqual(self.respons[0], self.new_employee.give_raise())

    def test_give_custom_raise(self):
        """test czy danie premii zwiększy roczne wynagrodzenie"""
        self.assertEqual(self.respons[1], self.new_employee.give_raise(self.amount))

if __name__ == '__main__':
    unittest.main()

Niestety podczas testu dostaję błąd o treści: AssertionError: 52000 != None. Nie ma pojęcia, co robię źle. Bardzo proszę o pomoc.

2

Co zwraca self.new_employee.give_raise()? Czy w ogólności Employee.give_raise?

Poza tym, w setUp powinieneś jedynie tworzyć instancję Employee, a rzeczy takie jak jaki parametr przekazujesz do testowanej metody, czy jaki powinien być wynik, powinny być lokalne dla konkretnego testu. Wyobraź sobie, że tych testów nie masz dwóch, tylko 30. Niezłe spaghetti by wyszło :)

1

AssertionError: 52000 != None mówi jasno, że twoja metoda zwraca ```None`` co jest oczywiście prawdą.

0

Dziękuje za odpowiedzi. Teraz rozumiem. Poprawiłem i działa. Trzeba porównać dwie wartości, a ja odwoływałem się do metody **shit **zamiast do wartości. Jeszcze długa droga przede mną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1