下面的测试代码检查函数中是否出现异常。我希望考试能通过,但结果却表明考试失败了。测试代码如下:
import unittest
# define a user-defined exception
class MyException(Exception):
def __str__(self):
return repr("ERROR: Just raised my exception!")
# this is my main class with a method raising this exception
class MyMainObject(object):
def func(self):
raise MyException()
# the test class
class TestConfig(unittest.TestCase):
def test_1(self):
other = MyMainObject()
self.assertRaises(MyException, other.func())
# calling the test
if __name__ == '__main__':
unittest.main()
当在assert语句中调用other.func()
时,MyException
将被引发(可以很容易地检查)。因此,assertRaises
测试应该通过测试,因为other.func()
与{
我看不出什么问题,所以我希望能在这个问题上提供一些意见。在
assertRaises
为您调用函数。通过自己调用它,在assertRaises
可以测试它之前引发了。在将代码更改为:
它会正常工作的。或者,您可以使用
^{pr2}$assertRaises
作为上下文管理器(Python2.7及更高版本):使用
assertRaises
作为上下文管理器有一个额外的优势,您现在可以检索异常实例并对其执行进一步的测试:由于语言的规则,在输入被调用函数的代码之前对参数进行求值(这通常是件好事)。因此,
assertRaises
无法捕捉参数求值期间发生的异常。解决方法(在多个API中)是将一个可调用的传递给像assertRaises
这样的方法,这样它们就可以在它们可以控制的位置和捕捉异常的地方对其进行求值。如果整个参数是一个方法调用,那么绑定方法的魔力使您可以非常优雅地声明这一点,而不必使用lambda
或这样的愚蠢:相关问题 更多 >
编程相关推荐