Python单元测试-NameError:name'';没有定义

Python单元测试-NameError:name'';没有定义,python,mocking,python-unittest,Python,Mocking,Python Unittest,使用Python3.x。 在为以下代码运行测试用例时,我得到了错误- name错误:未定义名称“TEST\u VAR”。我附加了要测试的文件、代码正在读取的yaml文件和单元测试文件 FileToTest.py: yaml文件: var1: var12: someVal12 var13: someVal13 var2: var21: someVal21 测试用例: 处理这种情况的正确方法是什么?我试着使用补丁,但没有白费 python中有两层变量,局部变量和全局变量。在函数中引用变

使用Python3.x。 在为以下代码运行测试用例时,我得到了错误-
name错误:未定义名称“TEST\u VAR”
。我附加了要测试的文件、代码正在读取的yaml文件和单元测试文件

FileToTest.py:

yaml文件:

var1:
  var12: someVal12
  var13: someVal13
var2:
  var21: someVal21
测试用例:


处理这种情况的正确方法是什么?我试着使用补丁,但没有白费

python中有两层变量,局部变量和全局变量。在函数中引用变量时,除非将其设为全局变量,否则该变量仅存在于该函数中。您可以将变量作为参数传递到函数中,也可以引用全局变量。要做到这一点,您可以将TEST_VAR移到main函数之外,或者在上面写入

global TEST_VAR

python中有两层变量,局部变量和全局变量。在函数中引用变量时,除非将其设为全局变量,否则该变量仅存在于该函数中。您可以将变量作为参数传递到函数中,也可以引用全局变量。要做到这一点,您可以将TEST_VAR移到main函数之外,或者在上面写入

global TEST_VAR


如果FileToTest.py中的uuu name uuu='\uuuuu main uuu'块,则单元测试不会执行
,因为FileToTest只被导入,而不是执行。因此,即使FileToTest不是正在运行的文件,也需要确保定义了
TEST\u VAR
。如果FileToTest函数应该可以从导入中运行,那么您的测试已经成功地发现了一个bug。是否正在模拟解决方案?您可以通过代码解释如何处理此问题吗?在unittest脚本中初始化
TEST\u VAR
,或者在
FileToTest.py
中初始化它,而不是在
if\uu name\uu
语句中,或者更改您的函数,使其不需要已初始化
TEST\u VAR
。如果我将
TEST\u VAR=FileToTest1.method1()
添加到TestFile的主方法,我仍然会收到相同的错误,当调用转到method1的异常时,您的单元测试不会执行FileToTest.py中的
if uuuuuuu name\uuuuuuuu='\uuuuuuuuu main\uuuuuuu'
块,因为FileToTest只是导入的,而不是执行的。因此,即使FileToTest不是正在运行的文件,也需要确保定义了
TEST\u VAR
。如果FileToTest函数应该可以从导入中运行,那么您的测试已经成功地发现了一个bug。是否正在模拟解决方案?您可以通过代码解释如何处理此问题吗?在unittest脚本中初始化
TEST\u VAR
,或者在
FileToTest.py
中初始化它,而不是在
if\uu name\uu
语句中,或者更改您的函数,使其不需要已经初始化
TEST\u VAR
。如果我将
TEST\u VAR=FileToTest1.method1()
添加到TestFile的主方法,我仍然会收到相同的错误,因为调用的是method1的异常。我在FileToTest.py中添加了
global TEST\u VAR
。仍然是相同的错误。请尝试将全局代码添加到定义它的位置,以便将主函数和methodToTest添加到其中。如果这样做不起作用,请尝试将代码从FileToTest中的main移出主函数,并将其保留在Executor中。我尝试过,但它不起作用。也许我说的不对。你能用代码行告诉我你到底在建议什么吗?此外,我不希望实际执行method1(),而是返回TEST_VAR的模拟键值对响应。或者删除main函数并取消插入main中的所有代码。如果不想执行方法1,请在第4行定义TEST_VAR,并稍后在FileToTest.py中添加的代码i
global TEST_VAR
中覆盖它。仍然是相同的错误。请尝试将全局代码添加到定义它的位置,以便将主函数和methodToTest添加到其中。如果这样做不起作用,请尝试将代码从FileToTest中的main移出主函数,并将其保留在Executor中。我尝试过,但它不起作用。也许我说的不对。你能用代码行告诉我你到底在建议什么吗?此外,我不希望实际执行method1(),而是返回TEST_VAR的模拟键值对响应。或者删除main函数并取消插入main中的所有代码。如果您不想执行method1,那么在第4行定义TEST_VAR,并在稍后的代码中覆盖它
global TEST_VAR