Testowanie klasy za pomocą unittest - jak z automatu uzupełnić input.

0

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()

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