本例中的'错误'可能是任何异常对象。我想也许你已经阅读了一个代码示例,用它作为一个metasyntatic占位符来表示“适当的异常类”。
所有异常的基类称为“异常”,其大部分子类都是涉及错误类型的描述性名称,如'OSError','ValueError','NameError','TypeError'。
在这种情况下,相应的错误是'ValueError'(foo的值是错误的,因此是一个ValueError)。我会建议在脚本中用'ValueError'替换'Error'。
这是您正在尝试编写的代码的完整版本,我复制了所有内容,因为您的原始示例中有一个奇怪的关键字参数,您似乎正在与某个任务合并,并且正在使用“failUnless”功能名,因为这是函数的非别名名称:
class MyClass:
def __init__(self, foo):
if foo != 1:
raise ValueError("foo is not equal to 1!")
import unittest
class TestFoo(unittest.TestCase):
def testInsufficientArgs(self):
foo = 0
self.failUnlessRaises(ValueError, MyClass, foo)
if __name__ == '__main__':
unittest.main()
输出是:
.
----------------------------------------------------------------------
Ran 1 test in 0.007s
OK
有一个在单元测试库“单元测试”,其他单元测试的一个缺陷框架修复。您会注意到,从调用上下文中获取对异常对象的访问是不可能的。如果要解决这个问题,你必须重新定义方法在单元测试的一个子类:
这是它在使用中的例子:
class TestFoo(unittest.TestCase):
def failUnlessRaises(self, excClass, callableObj, *args, **kwargs):
try:
callableObj(*args, **kwargs)
except excClass, excObj:
return excObj # Actually return the exception object
else:
if hasattr(excClass,'__name__'): excName = excClass.__name__
else: excName = str(excClass)
raise self.failureException, "%s not raised" % excName
def testInsufficientArgs(self):
foo = 0
excObj = self.failUnlessRaises(ValueError, MyClass, foo)
self.failUnlessEqual(excObj[0], 'foo is not equal to 1!')
我从单元测试复制failUnlessRaises功能。从python2.5 py,并稍微修改它。
在这里你就错了,这就是你想要的东西,而不是,这里是你的代码打算写。这可能是我见过的最好的答案。 – LoveMeSomeCode 2013-02-03 03:03:20
self.failUnlessRaises现已弃用。改用self.assertRaises。 https://docs.python.org/2/library/unittest.html#deprecated-aliases – dghubble 2014-06-12 07:55:00