J'ai une fonction qui retourne un tuple qui, entre autres, contient une valeur de flotteur. Habituellement, j'utilise maintenant, je veux écrire un test pour cela: p> Cela échouera car le résultat de assertalement égals code> pour comparer ceux-ci, mais cela ne fonctionne pas avec des tuples. En outre, le tuple contient également d'autres types de données. Actuellement, je affie de tous les éléments du tuple individuellement, mais cela devient trop pour une liste de tels tuples. Y a-t-il un bon moyen d'écrire des assertions pour de tels cas?
Considérons cette fonction:
1.0 / 2 code> n'est pas exactement
0.5 code>. Quelqu'un peut-il recommander une bonne façon d'écrire une telle affirmation de manière lisible? P>
1.0 / 2 code> est exactement
0.5 < / code>, mais vous avez mon sens. P> p>
3 Réponses :
Ce que j'ai fait dans le passé consiste à écrire une fonction personnalisée qui établit une validité pour un type de données complexe, puis utilisé assert (isfoovovalid (foo)) code>. La fonction de validité peut simplement retourner vrai / faux, mais il est généralement préférable d'augmenter AssertionError avec un message approprié. P>
Je définirai probablement une fonction récursive. (Notez qu'il affirmera (1, 2) code> et
[1, 2] code> sont égaux.) p> p>
Eh bien, comment diriez-vous de votre fonction avec quelques zips:
def testF(self): for tuple1, tuple2 in zip(f(range(1,3)), [(1.0, 2), (0.5, 4)]): for val1, val2 in zip(tuple1, tuple2): if type(val2) is float: self.assertAlmostEquals(val1, val2, 5) else: self.assertEquals(val1, val2)
En fait, 0,5 est exactement représentable pour
double code>.
Je suis juste compris cela aussi - mais vous obtenez le point général que j'espère.