Na podstawie napisanego skryptu testującego możemy napisać plik employee.py tzn.
class Employee():
bonus = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
def get_email(self):
pass
def set_bonus(self, bonus):
pass
def get_full_salary(self):
pass
@classmethod
def from_full_name(cls, first_name, last_name, salary):
name = '{}.{}'.format(first_name, last_name)
return cls(name, salary)
Tak utworzony zrąb klasy Employee po uruchomieniu testów generuje 2 niepowodzenia w przeprowadzonych testach (pomimo obecności kilku asercji w jednym teście). Uzupełnienie metod klasy Employee spowoduje poprawne przejście 2 testów tzn.
class Employee():
bonus = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
def get_email(self):
return '{}@company.com'.format(self.name)
def set_bonus(self, bonus):
self.bonus = bonus
def get_full_salary(self):
return self.salary + self.salary * self.bonus / 100
@classmethod
def from_full_name(cls, first_name, last_name, salary):
name = '{}.{}'.format(first_name, last_name)
return cls(name, salary)
Oprócz sprawdzania równości assertEqual(x, y) możemy sprawdzać różnego rodzaju asercje np.
- assertNotEqual(x, y) #sprawdza, czy x != y
- assertIsNone(x) #sprawdza, czy x jest wartością None
- assertTrue(x) #sprawdza czy bool(x) jest wartością True
Metoda setUp() z modułu unittest jest uruchamiana każdorazowo przed wykonaniem kolejnego testu. Podobnie istnieje metoda tearDown(), która jest wykonywana po zakończeniu każdego testu.
Istnieją również metody klasowe setUpClass() oraz tearDownClass(), które są uruchamiane przed rozpoczęciem i po zakończeniu wszystkich testów np. w celu zainicjowania a następnie zamknięcia połączenia z bazą danych.