J'essaie de faire des tests unitaires avec pytest .
Je pensais à faire des choses comme ça:
actual = b_manager.get_b(complete_set)
assert actual is not None
assert actual.columns == ['bl', 'direction', 'day']
La première affirmation est ok mais avec la seconde j'ai une erreur de valeur.
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Je suppose que ce n'est pas la bonne façon d'affirmer l'égalité de deux listes différentes avec pytest.
Comment puis-je affirmer que les colonnes du cadre de données (une liste) sont égales à celles attendues?
Merci
Vous pouvez faire une compréhension de liste pour vérifier l'égalité de toutes les valeurs. Si vous appelez all
dans le résultat de la liste des compréhensions, il renverra True
si tous les paramètres sont égaux.
actual = ['bl', 'direction', 'day']
assert all([a == b for a, b in Zip(actual, ['bl', 'direction', 'day'])])
print(all([a == b for a, b in Zip(actual, ['bl', 'direction', 'day'])]))
>>> True
Voir ceci :
Remarque:
Vous pouvez simplement utiliser l'instruction
assert
pour affirmer les attentes de test. pytest Advanced assertion introspection rapportera intelligemment les valeurs intermédiaires de l'expression assert vous libérant de la nécessité d'apprendre les nombreux noms de méthodes héritées JUnit .
Et ceci :
Des comparaisons spéciales sont effectuées pour un certain nombre de cas:
- comparaison de longues chaînes: un diff contextuel est affiché
- comparaison de séquences longues: premiers indices défaillants
- comparaison de dict: différentes entrées
Et la démo de reporting :
failure_demo.py:59: AssertionError
_______ TestSpecialisedExplanations.test_eq_list ________
self = <failure_demo.TestSpecialisedExplanations object at 0xdeadbeef>
def test_eq_list(self):
> assert [0, 1, 2] == [0, 1, 3]
E assert [0, 1, 2] == [0, 1, 3]
E At index 2 diff: 2 != 3
E Use -v to get the full diff
Voir l'assertion pour l'égalité des listes avec littéral ==
là bas? pytest a fait le travail acharné pour vous.
Si vous utilisez le unittest.TestCase
Intégré, il existe déjà une méthode qui peut le faire pour vous: unittest.TestCase.assertListEqual
Si vous vous souciez de l'ordre des listes, et unittest.TestCase.assertCountEqual
Si vous ne le faites pas 't.
https://docs.python.org/3.5/library/unittest.html#unittest.TestCase.assertCountEqual
Utilisez la fonction numpy
array_equal
:
import numpy as np
test_arrays_equal():
a = np.array([[1, 3], [2, 3], [1, 4], [2, 4], [1, 5], [2, 5]])
b = np.array([[1, 3], [2, 3], [1, 4], [2, 4], [1, 5], [2, 5]])
assert np.array_equal(a, b)
convertissez les tableaux numpy en listes python et vous obtiendrez une meilleure réponse que de simplement utiliser all
ou any
. De cette façon, si le test échoue, vous ' Je vais voir en quoi le prévu et le réel diffèrent