我是一名技术教师,试图学习如何使用pytest创建专门的koan,让我的学生学习python语法.(如果你判断前面的问题,我有关于这里发生了什么的细节.

我熟悉测试驱动开发,但主要是JavaScript/jQuery.当涉及Python语法时,我对OOP也不太熟悉,现在我必须把它教给我的学生(显然,这是学习和所有这些的最佳方法).

我非常肯定我写的代码是正确的,因为命令行测试正在工作,但我需要使用TDD来工作,因为我的学生没有访问命令行的权限,必须在基于浏览器的代码系统中运行代码.

我试过使用hasattr(),但它总是返回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.它应该是真实的.我不确定我做错了什么,我相当肯定这将是一个"键盘和椅子之间存在问题"的事件,但我对这在实践中如何工作感到困惑.

推荐答案

您提供的代码会判断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')

测试你创建的对象是否具有预期值也是一个好主意—如果类型为type的对象具有属性name,上面的测试可能已经通过,而你不会更清楚.

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')
  assert my_pet.name == 'tuffy'

Python相关问答推荐

在Pandas框架中截短至固定数量的列

根据网格和相机参数渲染深度

计算所有前面行(当前行)中列的值

如何在Python中使用io.BytesIO写入现有缓冲区?

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

根据不同列的值在收件箱中移动数据

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

Pandas - groupby字符串字段并按时间范围 Select

如何在虚拟Python环境中运行Python程序?

计算组中唯一值的数量

ODE集成中如何终止solve_ivp的无限运行

Python解析整数格式说明符的规则?

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

给定高度约束的旋转角解析求解

判断Python操作:如何从字面上得到所有decorator ?

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

Seaborn散点图使用多个不同的标记而不是点

从列表中分离数据的最佳方式

如何在python tkinter中绑定键盘上的另一个回车?

对包含JSON列的DataFrame进行分组