class AppError(Exception): pass
class MissingInputError(AppError):
em = {1101: "Date input is missing. Please verify.", \
1102: "Key input is missing. Please verify.", \
1103: "Stn input is missing. Please verify."}
# and so on ...
...
def validate(self):
""" Method of Input class to validate input and save it """
params = self.__params
if 'dt' in params:
self.__validateKey(escape(params['dt'][0]))
else:
raise MissingInputError(1101)
if 'key' in params:
self.__validateService(escape(params['key'][0]))
else:
raise MissingInputError(1102)
# and so on ...
单元测试上面的内容,我知道MissingInput测试类中的以下测试:
def testMissingKeyInput(self):
""" Missing key should raise error """
ip = controller.Input(MissingInput.missInputKey)
self.assertRaises(errors.MissingInputError, ip.validate)
def testMissingDtInput(self):
""" Missing dt should raise error """
ip = controller.Input(MissingInput.missInputDt)
self.assertRaises(errors.MissingInputError, ip.validate)
# and so on ...
将正确检测是否引发了MissingInputError异常。
有没有办法在测试中确定在调用异常时传递给异常的错误号,以便我可以确定是针对该特定缺失输入引发错误,而不是针对任何其他缺少的输入?
(P.S: Python 2.4.3 )。
提示:如果您遇到2.4到2.6,使用unittest2 library 。 在Python 2.7和3.2中,对unittest的一系列改进将会到来。 unittest2是新功能(和测试)的后端,可与Python 2.4,2.5& 2.6。
答案 0 :(得分:3)
您可以传递针对邮件运行的正则表达式:
import unittest
class MyError(Exception):
pass
def raiseError():
raise MyError(100)
class TestStuff(unittest.TestCase):
def testError(self):
self.assertRaisesRegexp(MyError, '100', raiseError)
unittest.main()
这对你有意义吗?如果你提出MyError('foo')或MyError(101),测试将失败,因为那些不匹配'100'的正则表达式。幸运的是,这种方法可以对付数字和其他任何可以转换为字符串的方法。
有关assertRaisesRegexp的详细信息,请参阅unittest documentation。
或者,如果您使用的是Python 2.6或更早版本,则不存在assertRaisesRegexp,您必须执行以下操作:
try:
<code>
except MyError, message:
self.failUnlessEqual(message.args, <expected args>)
else:
self.fail('MyError not raised')
答案 1 :(得分:2)
参数位于args
属性:
>>> class CustomException(Exception):
... pass
...
>>> e = CustomException(42)
>>> e.args
(42,)
我敢打赌它也是available for Python 2.4。
HTH
编辑:由于单元测试是常用代码,因此您也可以在其中使用args
参数:
>>> import unittest
>>> class Test(unittest.TestCase):
... def testA(self):
... try:
... raise CustomException(42)
... except CustomException, e:
... self.assertEquals(e.args[0], 42)
...
>>>