我试图测试两个对象是否相等.该对象的类型是Point,它是由ROS(机器人操作系统)定义的类.我有以下测试:

def test_when_getting_position_after_2s_then_position_at_2s_is_returned(self):

self.expected_position.x = -self.radius

self.expected_position.y = 0

self.assertAlmostEqual(

self.expected_position,

self.trajectory.get_position_at(2))

我正在使用unittest,当我尝试断言它们是否几乎相等时,我收到一条错误消息:

TypeError: unsupported operand type(s) for -: ‘Point’ and ‘Point’

当我使用assertEqual时,出现相同的错误,并且我知道可以做到这一点:

self.assertAlmostEqual(self.expected_position.x, self.trajectory.get_position_at(1).x)

self.assertAlmostEqual(self.expected_position.y, self.trajectory.get_position_at(1).y)

但是,我希望能够主张立场而不是具体领域.我该如何实现?

编辑:异常的完整回溯是:

Error

Traceback (most recent call last):

File "/usr/lib/python2.7/unittest/case.py", line 329, in run

testMethod()

File "/home/m/turtlebot_ws/src/trajectory_tracking/src/test/trajectory/test_astroid_trajectory.py", line 26, in test_when_getting_position_after_1s_then_position_at_1s_is_returned

self.assertAlmostEqual(self.expected_position, self.trajectory.get_position_at(1))

File "/usr/lib/python2.7/unittest/case.py", line 554, in assertAlmostEqual

if round(abs(second-first), places) == 0:

TypeError: unsupported operand type(s) for -: 'Point' and 'Point'

解决方法:

assertAlmostEqual(a,b)要求abs(a-b)是有效的,但是您没有为Point类型定义减法运算符,因此是错误.

class Point(object):

...

def __sub__(self, other): # <-- define the subtraction operator so `a - b` is valid

return Vector(self.x - other.x, self.y - other.y)

class Vector(object):

...

def __abs__(self): # <-- define the absolute function so `abs(v)` is valid

return (self.x*self.x + self.y*self.y)**0.5

如果您不能在类定义中提供__sub__,则可以在测试用例中使用monkey-patching来提供它.

def sub_point(self, other):

return complex(self.x - other.x, self.y - other.y)

# ^ for simplicity we abuse a complex number as a 2D vector.

Point.__sub__ = sub_point

标签:python-unittest,python

来源: https://codeday.me/bug/20191112/2023827.html

python断言assertequal_python-尝试断言AlmostEqual / assertEqual时,不受支持的操作数类型...相关推荐

  1. float在python中的书写形式错误的是_python – 不支持的操作数类型:’float’和’str’错误...

    我是 Python的新手,我现在仍然坚持做什么,因为我一直收到这个错误.我试图将得分文件的内容添加到一起并获得平均值,但我似乎无法让它工作. 我的代码: # open and read file st ...

  2. python支持list类型吗_Python-不支持的操作数类型为%:“list”和“int”

    我看了stackoverflow上的其他问题,但它们不同,似乎不适用于这个问题,所以这里. 我已经编写了一个简单的脚本,它可以打印出1-49之间的每个数字,并使用range函数将其放入一个列表中. 现 ...

  3. python支持list类型吗_Python Numpy不支持的操作数类型“list”“list”

    编辑答案: 初始列表的元素是列表.这些列表的长度不同,因此强制转换为NumPy数组将生成dtype对象的数组,即数组的元素是列表.请看这里:https://stackoverflow.com/a/33 ...

  4. PhotoshopCC 使用透视剪裁工具时提示:无法使用透视剪裁工具因为图像包含不受支持的图层类型?

    提示:无法试用透视裁剪工具 因为图像包含不受支持的图层类型. 原因:这个工具只对一个单图层的PSD文档或者全是栅格化图层生效,如果有2或2个以上图层,那就不行!如果有智能对象图层也不行,智能对象图层保 ...

  5. python断言assertequal_python中那个断言assert的优化

    Python Assert 为何不尽如人意# Python中的断言用起来非常简单,你可以在assert后面跟上任意判断条件,如果断言失败则会抛出异常. Copy >>> assert ...

  6. python 正则表达式 断言 不定长表达式_MyEssay 之 Python正则表达式 —— 四种断言扩展的理解...

    我们经常用正则表达式来检测一个字符串中包含某个子串,要表示一个字符串中不包含单个的某字符或某些字符也很容易,用[^...]形式就可以了.但是要表示一个字符串中不包含某个子串(由字符序列构成)的时候,用 ...

  7. python你真的懂断言嘛?

    目录 前言 一.python中的断言 二.具体案例 前言 先来看看断言是什么?它又有什么用? 编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设.程序员相信在程序中的某个特定点该表达 ...

  8. python的assert(断言)异常步骤机制

    python的assert(断言)异常步骤机制 文章目录: 断言(assert): 就是判断expression 这个表达式语句是否正确,所以切记,断言是有一个判断的过程!!! 格式: assert ...

  9. 5 JMeter断言-Jmeter响应中出现乱码时

    文章目录 2 JMeter 2.5 JMeter断言 2.5.1 响应断言 2.5.2 JSON断言 2.5.3 断言持续时间 3 使用问题 3.1 jmeter响应中出现乱码时 2 JMeter 2 ...

最新文章

  1. 深度学习光环背后,机器学习的一些新进展!!!
  2. 小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐
  3. 使用java搭建直播平台,我就不信你还听不明白了!
  4. 工具资源系列之给mac装个虚拟机
  5. 《循序渐进学Spark》一1.6 使用Spark Shell开发运行Spark程序
  6. 修改db2管理服务器,创建DB2管理服务器的两种情况
  7. 转 C++宏定义详解
  8. 自动填充html_第 11 篇:自动生成文章摘要
  9. Beyond Compare 出现“这个许可证密钥已被撤销”的解决办法(不会删除记录)
  10. SAR成像(七):RD成像算法
  11. weiphp 简介--笔记
  12. 在linux系统下安装oracle前的准备工作(配置oracle环境变量)
  13. java 循环读取文件_JAVA读写文件中的循环问题
  14. Basic SECS concept渣渣中文翻译
  15. 2021年茶艺师(初级)考试报名及茶艺师(初级)考试技巧
  16. Hex Fiend——mac 下 WinHex的完美替代
  17. hashcat在windows上的安装与简单使用
  18. Streaming Telemetry翻译学习
  19. 管理团队需要的能力和技术
  20. python 报价机器人_100行代码实现报价机器人公众号后台

热门文章

  1. LiveVideoStackCon 2018社区编辑门票兑换启动
  2. Serverless.com CEO首次访华!探讨无服务器技术落地
  3. calico 跨主机容器网络通信
  4. Python基于OpenCV的人脸检测
  5. 从基础货币到资金到债券,固收市场的分层都在这了
  6. 解决创建maven项目后,不能创建scala
  7. 大型电商网站的页面静态化方案是如何支撑亿级流量的?
  8. matlab线性拟合和非线性拟合,matlab多元非线性拟合
  9. lazada发货_Lazada怎么发货?最全Lazada发货流程及注意事项!值得收藏!
  10. 栈顶指针到底指向哪_被称为“程序员试金石”的指针真的没有那么难!不信的话你来看看