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 = nicknameto 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"))
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!