J'ai un test paramétré qui prend str
, et dict
comme argument et donc le nom semble assez bizarre si j'autorise pytest à générer des identifiants.test paramétré par pytest avec la fonction id personnalisée
Donc, je pense à générer des ID personnalisés en utilisant la fonction, mais il semble que cela ne fonctionne pas comme prévu.
def id_func(param):
if isinstance(param, str):
return param
@pytest.mark.parametrize(argnames=('date', 'category_value'),
argvalues=[("2017.01", {"bills": "0,10", "shopping": "100,90", "Summe": "101,00"}),
("2017.02", {"bills": "20,00", "shopping": "10,00", "Summe": "30,00"})],
ids=id_func)
def test_demo(date, category_value):
pass
je pensais que ce serait retourner quelque chose comme ça
test_file.py::test_demo[2017.01] PASSED
test_file.py::test_demo[2017.02] PASSED
mais il est de retour cela. Est-ce que quelqu'un pourrait me dire ce qui ne va pas avec ceci, ou y a-t-il un moyen de réaliser ceci?
Mise à jour: Je me rends compte, quel est le problème, if_func sera appelé pour chaque paramètre et si je ne reviendrai pas str
pour toute fonction par défaut du paramètre sera appelé. J'ai corrigé mais c'est aussi moche.
def id_func(param):
if isinstance(param, str):
return param
return " "
Maintenant, il retourne quelque chose comme ça,
test_file.py::test_demo[2017.01- ] PASSED
test_file.py::test_demo[2017.02- ] PASSED
Le problème est même si je retourne une chaîne vide (à savoir return ""
), il prend la représentation par défaut. quelqu'un pourrait-il me dire pourquoi?