如何断言运算符 < 和 >= 未实现?
How to assert operators < and >= are not implemented?
最初我没有使用 unittest
框架,所以为了测试相同 class 的两个对象不能使用运算符 <
和 >=
进行比较,我做了类似的事情:
try:
o1 < o2
assert False
except TypeError:
pass
不过在那之后,我决定开始使用 unittest
模块,所以我将我的测试转换为使用相同模块编写测试的方式。
我试图通过以下方式完成与上面相同的事情:
self.assertRaises(TypeError, o1 < o2)
但这并不完全有效,因为 o1 < o2
试图调用运算符 <
,而不是作为对函数的引用,函数应该作为测试的一部分被调用。
有没有一种方法可以在不需要将 o1 < o2
包装在函数中的情况下完成我所需要的?
使用 assertRaises
作为上下文管理器:
with self.assertRaises(TypeError):
o1 < o2
Here is an explanation of the with
statement. Here 是文档。 TL;DR:它允许执行带有 "context" 的代码块,即要设置和处置的东西 before/after 执行、错误处理等
在 assertRaises
的情况下,它的上下文管理器通过检查传递给它的 __exit__
方法的 exc
参数来简单地检查是否已引发所需类型的异常。
最初我没有使用 unittest
框架,所以为了测试相同 class 的两个对象不能使用运算符 <
和 >=
进行比较,我做了类似的事情:
try:
o1 < o2
assert False
except TypeError:
pass
不过在那之后,我决定开始使用 unittest
模块,所以我将我的测试转换为使用相同模块编写测试的方式。
我试图通过以下方式完成与上面相同的事情:
self.assertRaises(TypeError, o1 < o2)
但这并不完全有效,因为 o1 < o2
试图调用运算符 <
,而不是作为对函数的引用,函数应该作为测试的一部分被调用。
有没有一种方法可以在不需要将 o1 < o2
包装在函数中的情况下完成我所需要的?
使用 assertRaises
作为上下文管理器:
with self.assertRaises(TypeError):
o1 < o2
Here is an explanation of the with
statement. Here 是文档。 TL;DR:它允许执行带有 "context" 的代码块,即要设置和处置的东西 before/after 执行、错误处理等
在 assertRaises
的情况下,它的上下文管理器通过检查传递给它的 __exit__
方法的 exc
参数来简单地检查是否已引发所需类型的异常。