Как импортировать локальные переменные файла в текущий модуль - PullRequest
0 голосов
/ 27 января 2019

У меня есть эта функция в моем модуле MetaShrine.py

Я не могу использовать локальную переменную first_name_signup. Ошибка

NameError: name 'first_name_signup' is not defined

Я не хочу делать каждую переменную глобальной. Есть ли способ импортировать локальную переменную другого файла, не делая его глобальным?

Это одна из моих функций в моем основном модуле MetaShrine.py

def creating():

    first_name_signup = input("Enter Your First Name\n")
    password_signup = input("Creat a Password\n")

Когда я импортирую этот модуль в новый модуль, используя:

from MetaShrine import *

class test(unittest.TestCase):

    def test_creating(self):
        self.assertIsInstance(first_name_signup, str)

if __name__ == "__main__":
    unittest.main()

... Я понял:

NameError: name 'first_name_signup' is not defined

Ответы [ 3 ]

0 голосов
/ 28 января 2019

я думаю, что писать код таким способом было плохой идеей я должен был отделить вход пользователя от функций. размещение пользовательских входных данных во внешнем интерфейсе и операций на внутреннем интерфейсе позволит легко тестировать программу.

это то, что я сделал позже

0 голосов
/ 28 января 2019

Я думаю, правильный и питонский способ написания юнит-тестов в python - это импортировать ваши classes, methods и functions из вашего фактического модуля и затем запускать ваши тесты на импортированных объектах, а не импортировать return значения или переменные из модуля.

Так что в вашем случае это должно выглядеть так:

code.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

tests.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()
0 голосов
/ 27 января 2019

По сути, возвращаем значение и помещаем его в другую переменную в другом файле.Это лучший способ, о котором я могу думать.

def creating():

    first_name_signup = input("Enter Your First Name\n")
    password_signup = input("Creat a Password\n")

    return first_name_signup, password_signup

Второй файл:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...