J'ai une classe comme les suivantes:Unité testant une méthode appelée lors de l'initialisation?
class Positive(object):
def __init__(self, item):
self._validate_item(item)
self.item = item
def _validate_item(self, item):
if item <= 0:
raise ValueError("item should be positive.")
Je voudrais écrire un test unitaire pour _validate_item()
, comme ce qui suit:
class PositiveTests(unittest.TestCase):
def test_validate_item_error(self):
self.assertRaises(
ValueError,
Positive._validate_item,
0
)
Malheureusement, cela ne fonctionnera pas parce que l'unité test ne passe que 0 à la méthode, au lieu d'une instance de classe (pour le paramètre self
) et le 0. Existe-t-il une autre solution que de devoir tester cette méthode de validation indirectement via le __init__()
de la classe?
J'aime cette réponse. Si vous ressentez le besoin d'écrire des tests pour _validate_item() par lui-même, il est probable qu'il appartienne à lui-même. –
staticmethods sont pour la plupart inutiles en Python, dans ce cas utilisez un classmethod! – u0b34a0f6ae
Je n'utiliserais pas le décorateur '@ classmethod' ici pour la même raison que je ne le définirais pas comme une méthode d'instance. Il n'y a pas d'utilisation de 'cls'. Compte tenu de mes compétences, je ferais une fonction privée à la portée du module. –