J'essaie d'appuyer sur le code Python à tester un service à distance. J'utilise Pyunit avec Python 2.7.
dans la méthode code> SetupClass code>, le code invite l'utilisateur à entrer le mot de passe du service. Je veux garder tout ce qui est modulaire, j'ai donc créé des classes de test d'unité distinctes pour chaque classe étant testée. Ces classes ont tous accès au même service à distance et utilisent tous une définition unique de la méthode code> SETUPCLASCLASC CODE> FOM A SUPER CLASE. P>
Mon problème est que je dois rentrer dans le Mot de passe plusieurs fois (une fois pour chaque classe de test). Je suis fainéant. Je veux seulement entrer le mot de passe une fois pour tous les tests unitaires. Je pourrais éviter le problème en codant durement le mot de passe dans le test de l'unité, mais c'est une idée terrible. L'autre option consiste à repousser tout en une classe massive dérivée de Voici comment le code est structuré: p> Dans cet exemple, je devrais entrer deux fois sur le mot de passe: une fois pour la classe Quelqu'un a-t-il des conseils sur une manière sécurisée pour moi de faire une entrée de mot de passe ponctuelle juste au début du test de l'unité? Merci! P> p> unitest.descasse code>, mais je veux éviter cet itinéraire parce que j'aime la modularisation. P> A code> et une fois pour la classe B code >. P>
3 Réponses :
La définition de la classe est exécutée une fois.
import unittest
from getpass import getpass
class TestCommon(unittest.TestCase):
pwd = getpass()
class test_A(TestCommon):
def test_a(self):
self.assertEqual(self.pwd, 'secret')
class test_B(TestCommon):
def test_b(self):
reversed_pwd = self.pwd[::-1]
self.assertEqual(reversed_pwd, 'terces')
Lorsque j'exécute la commande python -m unittest découvre code> i obtenez-y deux fois pour le mot de passe. Est-ce parce que je définis la SETUPCLASS () dans la superclasse? Devrais-je le réécrire comme votre exemple de code?
@ROBOTERD, comment accédez-vous au mot de passe dans les sous-classes?
@ROBOTERD, si vous accédez au mot de passe en sous-classes sous forme self.pwd code> ou testcommon.pwd code>, ne réécrivez que la partie de testcommon.
Dans votre fonction SetupClass () CODE>, vous pouvez enregistrer le mot de passe en tant que propriété de auto code>, puis effectuez chaque test une partie de votre testcommon code > classe. import unittest
from getpass import getpass
class TestCommon(unittest.TestCase):
@classmethod
def setUpClass(self):
self.pwd = getpass()
def test_A(self):
self.assertEqual(self.pwd, 'TEST A')
def test_B(self):
self.assertEqual(self.pwd, 'TEST B')
Je pense que setupclass () code> est appelé chaque sous-classe de testcommon code>, cela me forcerait donc à entrer le mot de passe plusieurs fois.
import os
os.environ["password"] = "my_secret_password"
Connexes: Écrire un test fonctionnel Python qui nécessite un nom d'utilisateur et un mot de passe
En accédant à un service distant à partir de vos tests de l'unité, vous testez réellement ce service avec vos classes. Pourquoi ne vous moquez-vous pas du service à distance?