Forum Testowania i AutomatyzacjiKategoria: PytanieProblem z klasą pomocnicza podczas uruchomiania testu
AvatarŁukasz Błaszkowski zapytał 6 lat temu

Witam,
mam problem z klasą pomocnicza podczas uruchomiania testu.
Jak ma tylko w klasie Contakt:

class Contact:
   def __init__(self, firstname, middlename, lastname, nickname):
       self.firstname = firstname
       self.middlename = middlename
       self.lastname = lastname
       self.nickname = nickname      

to wszystko jest ok i działa test. A jak zrobię tak:

class Contact:
   def __init__(self, firstname, middlename, lastname, nickname, title_photo, email, email2, email3):
       self.firstname = firstname
       self.middlename = middlename
       self.lastname = lastname
       self.nickname = nickname
       self.title_photo = title_photo
       self.email = email
       self.email2 = email2
       self.email3 = email3

to test nie działa i w konsoli wyskakuje taki komunikat:

https://imgur.com/1qXvDiz

Mam dodane parametry do testów:
def test_add_contact_in_book_address(self):
       wd = self.wd
       self.open_home_page(wd)
       self.login(wd, username="admin", password="secret")
       self.user_data(wd, Contact(firstname="Lukasz", middlename="Ebi", lastname="Blaszkowski", nickname="lblaszkowski"))
       self.adding_a_picture_and_name(wd, Contact(title_photo="Chomik"))
       self.e_mail_data(wd, Contact(email="janekkolasa@wp.pl", email2="janekkolasa2@wp.pl", email3="janekkolasa3@wp.pl"))
 
 
 


1 odpowiedzi
Krzysiek KijasKrzysiek Kijas Personel odpowiedział 6 lat temu

Hej,
Problem dotyczy argumentów, jakie są przekazywane do konstruktora. W linii:

self.user_data(wd, Contact(firstname="Lukasz", middlename="Ebi", lastname="Blaszkowski", nickname="lblaszkowski"))

brakuje określenia następujących wartości: title_photo, email, email2, email3
Ogólna zasada jest taka, że jeśli nie zdefiniujemy domyślnych wartości dla parametrów konstruktora/metody/funkcji, to musimy je zawsze podać. Dodatkowo domyślne wartości musimy podawać zaczynając od ostatnich parametrów, czyli nie możemy zrobić tak:

def __init__(self, firstname='Bob', middlename, lastname, nickname):

a musimy zrobić tak:

def __init__(self, firstname, middlename, lastname, nickname='some_nickname'):

.
Są dwa wyjścia:

  • pozostałe parametry ustawić na domyślne wartości, czyli np.:
    def __init__(self, firstname, middlename, lastname, nickname, title_photo=None, email=None, email2=None, email3=None):
  • wszystkim parametrom nadać domyślne wartości (dość bezpieczne, chociaż później gdzieś może nam się pojawić domyślna wartość, której zapomnieliśmy nadpisać…)
  • podawać zawsze wszystkie wymagane wartości

Pierwsza opcja, jeśli ustalimy domyślne wartości tylko dla ostatnich parametrów, spowoduje, że linia:

self.e_mail_data(wd, Contact(email="janekkolasa@wp.pl", email2="janekkolasa2@wp.pl", email3="janekkolasa3@wp.pl"))

zwróci nam wyjątek. W tym wypadku można stworzyć jedną instancję obiektu Contact, gdzie przekażemy wszystkie parametry, a następnie przekazać instancję do metod self.user_data oraz self.e_mail_data czyli:

contact = Contact(firstname="Lukasz", middlename="Ebi", lastname="Blaszkowski", nickname="lblaszkowski", title_photo="", email="janekkolasa@wp.pl", email2="janekkolasa2@wp.pl", email3="janekkolasa3@wp.pl")
self.user_data(wd, contact)
self.e_mail_data(wd, contact)

Mam nadzieję, że to pomoże 🙂


Powodzenia!