How to assert operators < and >= are not implemented?

久未见 提交于 2019-12-11 00:19:19

问题


Initially I was not using the unittest framework, so to test that two objects of the same class are not comparable using the operators < and >= I did something like:

try:
    o1 < o2
    assert False
except TypeError:
    pass

after that, though, I decided to start using the unittest module, so I'm converting my tests to the way tests are written with the same module.

I was trying to accomplish the equivalent thing as above with:

self.assertRaises(TypeError, o1 < o2)

but this does not quite work, because o1 < o2 tries to call the operator <, instead of being a reference to a function, which should be called as part of the test.

Is there a way to accomplish what I need without needing to wrap o1 < o2 in a function?


回答1:


Use assertRaises as a context manager:

with self.assertRaises(TypeError):
    o1 < o2

Here is an explanation of the with statement. Here are the docs. TL;DR: It allows the execution of a code block with a "context", i.e. things to be set up and disposed before/after the execution, error handling etc.

In the case of assertRaises, its context manager simply checks whether an execption of the required type has been raised, by checking the exc agrument passed to its __exit__ method.



来源:https://stackoverflow.com/questions/39224762/how-to-assert-operators-and-are-not-implemented

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!