web-dev-qa-db-fra.com

Comment puis-je affirmer l'égalité des listes avec pytest

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

18
bAN

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
16
ritchie46

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.

46
Rockallite

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

5
Dylan Orzel

Utilisez la fonction numpyarray_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)
1
Adam Erickson

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

0
salah