我是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
我不确定为什么这里的自我未被定义。
答案 0 :(得分:3)
self
不是像Java和Javascript中的this
这样的神奇变量。这就是为什么你必须将它定义为方法中的第一个参数。如果未将self
定义为参数或其他类型的变量,则不会像任何其他变量那样定义它。它的名字纯粹是传统的。
(虽然如果self
等同于this
,它仍然没有意义,因为没有相关的实例,只有课程)
当你在班级时,你可以正常使用班级的其他变量。例如:
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
可能无用(取决于类定义的其余部分),因为global
用于分配,而不是访问。testcases
,为什么定义testcases_exec_list
?你明白这会使它们成为同一个列表,而不是制作副本吗?答案 1 :(得分:1)
self
未定义,因为self
不存在。在课程定义时,尚未创建self
。 Python创建self
的唯一时间是在类的实例上调用绑定方法时。 self
仍然是Python隐式传递给绑定方法的普通变量。
因此,在您的情况下,您不需要self
,只需按原样使用testcase
:
@unittest.skipIf('0' not in testcases, "Testcase input not given")
当在类的命名空间内时,那里定义的变量可以正常使用,就好像它们是全局的一样:
>>> class Class:
attr1 = 0
print(attr1)
0
>>>