如何使用pytest查看python中是否存在class attribute属性?

问题描述 投票:0回答:1

我是一名技术老师,试图学习如何使用 pytest 为我的学生创建专业的 koans 来学习 python 语法。 (如果您检查之前的问题,我可以详细了解这里发生的情况。)

我熟悉测试驱动开发,但主要是 JavaScript/jQuery。当涉及到 Python 语法时,我对 OOP 也不太熟悉,现在我必须教我的学生(显然是最好的学习方式等等)。

我相当确定我正在正确编写代码,因为命令行测试正在运行,但我需要使用 TDD 才能实现这一点,因为我的学生无权访问命令行,必须在基于浏览器的代码系统。

我尝试过使用 hasattr(),但它总是返回 False,即使它不应该返回 False,假设我正确使用了它。

该类的代码是这样的:

class Dog:
  def __init__(self, name, breed):
    self.name = name
    self.breed = breed

测试代码位于另一个文件中,如下所示:

from utils.attribute_1 import Dog


def test_Dog():
  assert hasattr(Dog, 'name')

所以我上面所做的就是从文件中导入类 Dog,并设置一个测试函数,该函数应该显示我附加了属性“name”。

当我运行它时,它返回 False。它应该显示 True。我不确定我做错了什么,而且我相当确定这将是“键盘和椅子之间存在问题”事件,但我很困惑这在实践中应该如何运作。

python unit-testing pytest hasattr
1个回答
0
投票

您提供的代码检查 class Dog 本身的属性,而不是检查 Dog 类的 instance。 在Python中,类是

type
类型的对象。因此,在您的测试代码中,您正在检查类型为
type
的对象是否具有属性
name
。根据您的描述,您想要测试
Dog
类的对象是否具有属性
name
。为此,首先您需要创建一个
Dog
类的对象。您的测试应如下所示:

from utils.attribute_1 import Dog


def test_Dog():
  my_pet = Dog('tuffy', 'pomeranian')  # creating an object of class Dog
  assert hasattr(my_pet, 'name')
© www.soinside.com 2019 - 2024. All rights reserved.