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.

7
Pavan Gupta 7 mars 2016 à 16:16

3 réponses

Meilleure réponse

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
8
timmow 11 nov. 2017 à 14:56

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)
0
Forge 7 mars 2016 à 13:46

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)))
3
Sergey Voronezhskiy 24 mars 2016 à 14:51