Python 单元测试:'self' 未定义
Python unittest: 'self' is not defined
我是 unittest
的新手。我正在尝试根据列表中的值跳过测试用例。
class UESpecTest(unittest.TestCase):
global testcases_exec_list
testcases = []
testcases = testcases_exec_list
@unittest.skipIf('0' not in self.testcases, "Testcase input not given")
def test_retrieve_spec_info(self):
read_spec_info.open_csv(self.spec_info)
assert (bool(self.spec_info) == True) #Raise assertion if dictionary is empty
我收到以下错误
File "test_ue_cap_main.py", line 39, in UESpecTest
@unittest.skipIf('0' not in self.testcases, "Testcase input not given")
NameError: name 'self' is not defined
我不确定为什么这里没有定义 self。
self
不是像 Java 和 Java 脚本中的 this
那样的魔术变量。这就是为什么你必须将它定义为方法中的第一个参数。如果 self
没有定义为参数或某种其他类型的变量,那么它就像任何其他变量一样没有定义。它的名字纯属约定俗成。
(虽然如果 self
等同于 this
它仍然没有意义,因为没有问题的实例,只有 class)
当你处于class级别时,你可以正常使用class级别的其他变量。例如:
class A:
x = 1
y = 2
z = x + y # 3
因此您可以删除 self
并只说 '0' not in testcases
。
此外,您还发生了一些奇怪的事情:
global testcases_exec_list
testcases = []
testcases = testcases_exec_list
- 行
testcases = []
完全多余,因为您会立即覆盖它。
- 行
global testcases_exec_list
可能没有用(取决于 class 定义的其余部分)因为 global
用于赋值,而不是访问。
- 如果您已经有了
testcases_exec_list
,为什么还要定义 testcases
?你明白这使它们成为相同的列表,而不是制作副本吗?
self
未定义,因为 self
不存在。在 class 定义时,尚未创建 self
。 Python 唯一一次创建 self
,是在您对 class 的实例调用绑定方法时。 self
仍然是一个普通变量 Python 隐式传递给绑定方法。
因此在您的情况下,您不需要 self
,只需按原样使用 testcase
:
@unittest.skipIf('0' not in testcases, "Testcase input not given")
当在 class 的命名空间内时,在那里定义的变量可以像全局变量一样正常使用:
>>> class Class:
attr1 = 0
print(attr1)
0
>>>
我是 unittest
的新手。我正在尝试根据列表中的值跳过测试用例。
class UESpecTest(unittest.TestCase):
global testcases_exec_list
testcases = []
testcases = testcases_exec_list
@unittest.skipIf('0' not in self.testcases, "Testcase input not given")
def test_retrieve_spec_info(self):
read_spec_info.open_csv(self.spec_info)
assert (bool(self.spec_info) == True) #Raise assertion if dictionary is empty
我收到以下错误
File "test_ue_cap_main.py", line 39, in UESpecTest
@unittest.skipIf('0' not in self.testcases, "Testcase input not given")
NameError: name 'self' is not defined
我不确定为什么这里没有定义 self。
self
不是像 Java 和 Java 脚本中的 this
那样的魔术变量。这就是为什么你必须将它定义为方法中的第一个参数。如果 self
没有定义为参数或某种其他类型的变量,那么它就像任何其他变量一样没有定义。它的名字纯属约定俗成。
(虽然如果 self
等同于 this
它仍然没有意义,因为没有问题的实例,只有 class)
当你处于class级别时,你可以正常使用class级别的其他变量。例如:
class A:
x = 1
y = 2
z = x + y # 3
因此您可以删除 self
并只说 '0' not in testcases
。
此外,您还发生了一些奇怪的事情:
global testcases_exec_list
testcases = []
testcases = testcases_exec_list
- 行
testcases = []
完全多余,因为您会立即覆盖它。 - 行
global testcases_exec_list
可能没有用(取决于 class 定义的其余部分)因为global
用于赋值,而不是访问。 - 如果您已经有了
testcases_exec_list
,为什么还要定义testcases
?你明白这使它们成为相同的列表,而不是制作副本吗?
self
未定义,因为 self
不存在。在 class 定义时,尚未创建 self
。 Python 唯一一次创建 self
,是在您对 class 的实例调用绑定方法时。 self
仍然是一个普通变量 Python 隐式传递给绑定方法。
因此在您的情况下,您不需要 self
,只需按原样使用 testcase
:
@unittest.skipIf('0' not in testcases, "Testcase input not given")
当在 class 的命名空间内时,在那里定义的变量可以像全局变量一样正常使用:
>>> class Class:
attr1 = 0
print(attr1)
0
>>>