如何将文件的局部变量导入当前模块

时间:2019-01-27 08:32:02

标签: python python-3.x unit-testing

我的模块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 :(得分:0)

基本上,返回值并将其放在另一个文件中的另一个变量中。这是我能想到的最好方法。

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()

答案 1 :(得分:0)

我认为以这种方式编写代码是一个坏主意。我应该从功能中分离出userinput。将用户输入放在前端,将操作放在后端,将使程序易于测试。

那是我后来所做的

答案 2 :(得分:0)

我猜想用python编写单元测试的正确方法是从实际模块中导入classesmethodsfunctions,然后在导入的对象上运行测试而不是实际从模块中导入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()