Je veux tester les appels de fonction avec des arguments facultatifs.
Voici mon code:
list_get()
list_get(key, "city", 0)
list_get(key, 'contact_no', 2, {}, policy)
list_get(key, "contact_no", 0)
list_get(key, "contact_no", 1, {}, policy, "")
list_get(key, "contact_no", 0, 888)
Je ne suis pas en mesure de le paramétrer en raison d'arguments facultatifs, j'ai donc écrit des fonctions de test distinctes pour chaque appel d'API dans pytest
.
Je pense qu'il devrait y avoir une meilleure façon de tester celui-ci.
3 réponses
Vous pouvez peut-être utiliser *
operator :
@pytest.mark.parametrize('args,expected', [
([], expVal0),
([key, "city", 0], expVal1),
([key, 'contact_no', 2, {}, policy], expVal2)
([key, "contact_no", 0], expVal3)
([key, "contact_no", 1, {}, policy, ""], expVal4)
([key, "contact_no", 0, 888], expVal5)
])
def test_list_get(args, expected):
assert list_get(*args) == expected
Je pense que ce que vous faites est bon, mais je suggérerais de passer des arguments de valeur-clé afin de ne pas mélanger l'ordre des arguments.
Je suppose que votre en-tête de fonction ressemble à ceci:
def list_get(key=None, city=None, contact_no=None, policy=None):
...
Dans votre test, définissez la liste des combinaisons d'arguments que vous souhaitez tester:
kwargs = {'key': '..', 'city': '..', 'contact_no': '..', 'policy': '..'}
list_get(**kwargs)
kwargs_all_default_values = {}
list_get(**kwargs_all_default_values)
En plus des réponses @forge et @ ezequiel-muns, je suggère d'utiliser du sucre de pyhamcrest
:
import pytest
from hamcrest import assert_that, calling, is_not, raises
@pytest.mark.parametrize('func, args, kwargs', [
[list_get, (), {}],
[list_get, (key, "city", 0), {}],
[list_get, (key, "contact_no", 1, {}, policy, ""), {}],
[list_get, (), {'key': key}],
])
def test_func_dont_raises(func, args, kwargs):
assert_that(calling(func).with_args(*args, **kwargs), is_not(raises(Exception)))
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.