Problema test esercizio 3

a
alessio.palma (1480 points)
0 34 56
asked Dec 10, 2018 in Info sul corso e sugli esami by alessio.palma (1,480 points)

Ho un problema con il  ________ Test.test_20_new_Film_1___Blazing_Saddles_1974___93____USA___ ________

in pratica il test controlla se funziona tutto nella creazione di un nuovo oggetto di tipo film, ma ritorna questo errore:

test_03.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <test_03.Test testMethod=test_20_new_Film_1___Blazing_Saddles_1974___93____USA___>
film = <program03.Film object at 0x000001F92A4C3358>, titolo = 'Blazing Saddles'
durata = 93, anno = '1974', posti = {'USA'}

    def do_check_Film_dati_base(self, film, titolo, durata, anno, posti):
        '''Verifica che i dati di base del film ci siano'''
        posti = set(posti)
        self.assertEqual(type(film),    Film,       f"{film} non è una istanza di Film")
        self.assertEqual(film.titolo(), titolo,     f"Il titolo del Film non è {titolo}")
        self.assertEqual(film.durata(), durata,     f"Il film {titolo} dovrebbe durare {durata} minuti")
>       self.assertEqual(film.anno(),   int(anno),  f"Il film {titolo} è stato girato nel {anno}")
E       TypeError: 'int' object is not callable

test_03.py:345: TypeError
===================== 1 failed, 31 passed in 0.62 seconds =====================

Io uso int() solo per prendere la data di produzione del film in data['TITLE'][1], e non ho mai avuto problemi nel creare manualmente istanze di tipo film. Qualche aiuto?

128 views

2 Answers

Best answer
_andrea_ (45670 points)
2 40 297
answered Dec 10, 2018 by _andrea_ (45,670 points)
selected Dec 10, 2018 by alessio.palma
Penso sia lo stesso problema degli altri: definisci un attributo self.anno e un metodo self.anno(), solo che non puoi, infatti quando chiami self.anno() è come se facessi una cosa tipo 1967(), cioè richiami un attributo che è di tipo int come se fosse una funzione, infatti ti dice che int is not callable. Penso il problema sia questo
a
alessio.palma (1480 points)
0 34 56
commented Dec 10, 2018 by alessio.palma (1,480 points)

grazie, e chi lo sapeva che non si potesse fare! Sei meglio di wikipedia heart

K
Khalester (3310 points)
1 5 24
answered Dec 10, 2018 by Khalester (3,310 points)
Uhm ti sei assicurato che l'anno lo prende dal metodo film.anno(self)?
a
alessio.palma (1480 points)
0 34 56
commented Dec 10, 2018 by alessio.palma (1,480 points)

si, assicurato, il metodo mi ritorna self.dati['TITLE'][1], dove self.dati=data (definito nell'init). Provato anche a dichiarare direttamente nell'init self.anno=data['TITLE'][1] e ritornare self.anno nel metodo film.anno() ma niente

K
Khalester (3310 points)
1 5 24
commented Dec 10, 2018 by Khalester (3,310 points)

La risposta di andrea dovrebbe essere la soluzione.

"dichiarare direttamente nell'init self.anno=data['TITLE'][1] e ritornare self.anno nel metodo film.anno()".

self.anno magari chiamalo in un altro modo, o restituisci direttamente il VALORE nel return dell'apposito metodo

a
alessio.palma (1480 points)
0 34 56
commented Dec 10, 2018 by alessio.palma (1,480 points)
perfetto, grazie a entrambi!