Cześć,
miałem napisać test klasy, w której zawierają się informację na temat imienia, nazwiska i wysokości rocznej pensji. Klasa ma też zawierać metodę, która przyznaje podwyżkę z wartością domyślną 5000. Test ma być przeprowadzony w przypadku wartości domyślnej a drugi gdy sami podajemy wartość podwyżki w postaci argumentu.
Poniżej przedstawię kod, który działa. A później wkleję kod klasy, w której występuje przypisanie wartości podwyżki za pomocą atrybutu, który wartość podajemy za pomocą input.
I o ile w przypadku tego prostego wariantu test się wykonuje sam tzn. uruchamiam go i dostaje wynik.
Tak w przypadku tego drugiego muszę podać wartości t lub n i wysokość podwyżki. Próbowałem kilka razy różnych sposobów, dodawałem zmienne, nowe aliasy itd. ale efekt jest ten sam. Muszę po uruchomieniu testu wpisać t lub n i wysokość podwyżki.
kod employee2 , który działa z testem
class Employee():
"""Klasa zapisująca imię, nazwisko i wartość rocznych zarobków pracownika"""
def __init__(self, first_name, last_name, year_salary):
"""Przechowuje informację o pracowniku"""
self.first_name = first_name
self.last_name = last_name
self.year_salary = year_salary
def give_raise(self, given_raise=5000):
"""Metoda przydzielająca podwyżkę, domyślnie 5000 zł rocznie"""
self.given_raise = given_raise
self.year_salary += given_raise
def show_new_salary(self):
"""Wyświetlenie nowej rocznej pensji"""
print(f"Wypłata wynosi: {self.year_salary} rocznie.")
kod employee, który działa ale trzeba podczas testu podawać wartości:
class Employee():
"""Klasa zapisująca imię, nazwisko i wartość rocznych zarobków pracownika"""
def __init__(self, first_name, last_name, year_salary):
"""Przechowuje informację o pracowniku"""
self.first_name = first_name
self.last_name = last_name
self.year_salary = year_salary
def give_raise(self, given_raise=5000):
"""Metoda przydzielająca podwyżkę, domyślnie 5000 zł rocznie"""
self.given_raise = given_raise
print(f"Czy kwota podwyżki ma być inna niż domyślna? ('t'/'n')")
while True:
answer = input("Odpowiedź: ")
if answer == 'n':
self.year_salary += given_raise
break
elif answer == 't':
given_raise = input("Podaj kwotę podwyżki: ")
try:
given_raise =int(given_raise)
except ValueError:
print("Podaj wartość liczbową")
continue
else:
self.year_salary += given_raise
break
else:
print("Musisz wpisać 'n' lub 't' i określić wysokość podwyżki")
continue
def show_new_salary(self):
"""Wyświetlenie nowej rocznej pensji"""
print(f"Wypłata wynosi: {self.year_salary} rocznie.")
kod testu:
import unittest
from employee2 import Employee
class TestEmployee(unittest.TestCase):
"""Test kla dlasy Employee"""
def setUp(self):
"""Utworzenie egzemplarza pracownika do użycia we wszystkich metodach"""
self.employer = Employee('Jan', 'Kowalski', 60000)
def test_give_default_raise(self):
"""Sprawdzenie wartości rocznej pensji z domyślną podwyżką"""
self.employer.give_raise()
self.assertEqual(self.employer.year_salary, 65000)
def test_give_custom_raise(self):
"""Sprawdzenie wartości rocznej pensji z indywidualną podwyżką"""
self.employer.give_raise(10000)
self.assertEqual(self.employer.year_salary, 70000)
if __name__ == '__main__':
unittest.main()