Je souhaite effectuer des tests unitaires pour mon application et je dois comparer deux tableaux. Puisque array.__eq__
renvoie un nouveau tableau (donc TestCase.assertEqual
échoue), quel est le meilleur moyen d'affirmer l'égalité?
J'utilise actuellement
self.assertTrue((arr1 == arr2).all())
mais je ne l'aime pas vraiment
découvrez les fonctions d'assertion dans numpy.testing
, par exemple.
assert_array_equal
pour les tableaux d'égalité, le test d'égalité peut échouer et assert_almost_equal
est plus fiable.
mettre à jour
Il y a quelques versions, numpy a obtenu assert_allclose
qui est maintenant ma préférée, car elle nous permet de spécifier une erreur absolue et une erreur relative et ne requiert pas l'arrondi décimal comme critère de proximité.
Je pense que (arr1 == arr2).all()
est plutôt joli. Mais vous pouvez utiliser:
numpy.allclose(arr1, arr2)
mais ce n'est pas tout à fait pareil.
Une alternative presque identique à votre exemple est:
numpy.alltrue(arr1 == arr2)
Notez que scipy.array est en fait une référence numpy.array. Cela facilite la recherche de la documentation.
Je trouve qu'utiliserself.assertEqual(arr1.tolist(), arr2.tolist())
est le moyen le plus simple de comparer des tableaux avec unittest.
Je conviens que ce n'est pas la solution la plus jolie et probablement pas la plus rapide, mais elle est probablement plus uniforme avec le reste de vos scénarios de test. Vous obtenez une description de l'erreur la plus légère, et sa mise en œuvre est très simple.
Depuis Python 3.2, vous pouvez utiliser assertSequenceEqual(array1.tolist(), array2.tolist())
.
Cela a la valeur ajoutée de vous montrer les éléments exacts dans lesquels les tableaux diffèrent.
J'utilise ceci dans mes tests:
try:
numpy.testing.assert_array_equal(arr1, arr2)
res = True
except AssertionError as err:
res = False
print (err)
self.assertTrue(res)