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
  1. testcases = [] 完全多余,因为您会立即覆盖它。
  2. global testcases_exec_list 可能没有用(取决于 class 定义的其余部分)因为 global 用于赋值,而不是访问。
  3. 如果您已经有了 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
>>>