如何断言运算符<和> =没有实现?

nbr*_*bro 2 python unit-testing exception python-3.x python-unittest

最初我没有使用unittest框架,所以要测试同一个类的两个对象使用运算符是不可比的<,>=我做了类似的事情:

try:
    o1 < o2
    assert False
except TypeError:
    pass
Run Code Online (Sandbox Code Playgroud)

之后,我决定开始使用该unittest模块,因此我将测试转换为使用相同模块编写测试的方式.

我试图通过以下方式完成与上述相同的事情:

self.assertRaises(TypeError, o1 < o2)
Run Code Online (Sandbox Code Playgroud)

但这并不是很有效,因为它o1 < o2试图调用运算符<,而不是对函数的引用,这应该作为测试的一部分调用.

有没有办法在不需要o1 < o2包含函数的情况下完成我需要的东西?

cod*_*kel 5

使用assertRaises的上下文管理器:

with self.assertRaises(TypeError):
    o1 < o2
Run Code Online (Sandbox Code Playgroud)

以下是对该with陈述的解释.是文档.TL; DR:它允许执行带有"上下文"的代码块,即在执行之前/之后设置和处理的事情,错误处理等.

在这种情况下assertRaises,它的上下文管理器通过检查exc传递给它的__exit__方法的agrument来检查是否已经引发了所需类型的execption .