J'ai cette fonction dans mon module MetaShrine.py
Je ne peux pas utiliser la variable locale first_name_signup .
L'erreur est
NameError: name 'first_name_signup' is not defined
Je ne veux pas que chaque variable soit globale. Existe-t-il un moyen d'importer la variable locale d'un autre fichier sans le rendre global?
C'est l'une de mes fonctions dans mon module principal MetaShrine.py
from MetaShrine import *
class test(unittest.TestCase):
def test_creating(self):
self.assertIsInstance(first_name_signup, str)
if __name__ == "__main__":
unittest.main()
Lorsque j'importe ce module dans un nouveau module, en utilisant:
def creating():
first_name_signup = input("Enter Your First Name\n")
password_signup = input("Creat a Password\n")
... j'obtiens ceci:
NameError: name 'first_name_signup' is not defined
p>
3 Réponses :
En gros, retournez la valeur et placez-la dans une autre variable de l'autre fichier. C'est la meilleure façon de penser.
import MetaShrine
class test(unittest.TestCase):
def test_creating(self):
first_name_signup, password_signup = MetaShrine.creating()
self.assertIsInstance(first_name_signup, string)
if __name__ == "__main__":
unittest.main()
Deuxième fichier:
def creating():
first_name_signup = input("Enter Your First Name\n")
password_signup = input("Creat a Password\n")
return first_name_signup, password_signup
Traceback (dernier appel en dernier): Le fichier "testMetaShrine.py", ligne 9, dans test_creating first_name_signup, password_signup = MetaShrine.creating () AttributeError: l'objet de type 'MetaShrine' n'a pas d'attribut 'creation'
Alors les informations dans votre question ne sont pas exactes, ou peut-être avez-vous mis ce code dans le mauvais fichier? Le traçage dans votre commentaire ressemble à ce que vous avez essayé d ' importer MetaShrine en lui-même.
Je pense que c'était une mauvaise idée d'écrire du code de cette manière. je devrais avoir séparé userinput des fonctions. mettre les entrées utilisateur sur le frontend et les opérations sur le backend permettra au programme d'être facilement testable.
c'est ce que j'ai fait plus tard
Je suppose que la bonne façon et pythonique d'écrire des tests unitaires en python est d'importer vos classes , méthodes et fonctions à partir de votre module actuel puis exécutez vos tests sur les objets importés plutôt que d'importer réellement les valeurs ou les variables de return depuis le module.
Donc, dans votre cas, cela devrait ressembler à
code.py
import MetaShrine import creating
import unittest
class test(unittest.TestCase):
def test_creating(self):
# actual assert statement for the test case, i.e.
result, _ = creating()
self.assertEqual(result, 'some_name')
if __name__ == "__main__":
unittest.main()
tests.py
def creating():
first_name_signup = input("Enter Your First Name\n")
password_signup = input("Creat a Password\n")
return first_name_signup, password_signup
Par ailleurs, le test que vous écrivez est redondant car
inputdans python3 va toujours renvoyer un objetstr. Est-ce un vrai test que vous écrivez ou c'est juste un code factice pour ce post?juste un code factice. Je commence les tests, donc je voulais apprendre la syntaxe et le fonctionnement des tests unitaires.