6 python unit-testing python-unittest
我有代码,其中assertRaises在assertRaises失败时抛出异常.我认为如果assertRaises失败,那么测试就会失败,我会在最后得到一个报告说测试失败了.我没想到会抛出异常.以下是我的代码.我做错了什么?我正在使用Python 2.6.2.
import unittest
class myClass:
def getName(self):
raise myExcOne, "my exception one"
#raise myExcTwo, "my exception two"
#return "a"
class myExcOne(Exception):
"exception one"
class myExcTwo(Exception):
"exception two"
class test_myClass(unittest.TestCase):
def setUp(self):
self.myClass = myClass()
def testgetNameEmpty(self):
#self.assertRaises(myExcOne,self.myClass.getName)
#self.assertRaises(myExcTwo,self.myClass.getName)
try:
self.assertRaises(myExcTwo,self.myClass.getName)
except Exception as e:
pass
if __name__ == "__main__":
#unittest.main()
suite = unittest.TestLoader().loadTestsFromTestCase(test_myClass)
unittest.TextTestRunner(verbosity=2).run(suite)
Run Code Online (Sandbox Code Playgroud)
发布的代码是错误的.首先,class myClass():谢谢class myClass:.也if name == "main":应该是:
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
除了这些问题之外,这会失败,因为getName()引发异常myExcOne并且您的测试期望异常myExcTwo.
这是一些有效的代码.请编辑问题中的代码,以便我们将其剪切并粘贴到Python会话中:
import unittest
class myExcOne(Exception): "exception one"
class myExcTwo(Exception): "exception two"
class myClass:
def getName(self):
raise myExcTwo
class test_myClass(unittest.TestCase):
def setUp(self):
self.myClass = myClass()
def testgetNameEmpty(self):
#self.assertRaises(myExcOne,self.myClass.getName)
self.assertRaises(myExcTwo,self.myClass.getName)
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
从一开始,语句中()的classname之后class在现代Python中是完全正确的 - 根本不是错误.
在这个问题上的肉,assertRaises(MyException, foo) 被记录在案,以传播通过调用引发的异常foo(),其类型不是的子类MyException-只捕捞MyException和亚类的化合物.由于您的代码引发了一种类型的异常,并且您的测试需要一种不同的不相关类型,因此根据unittest模块的文档,此处引发的异常将传播,我引用:
如果引发异常则测试通过,如果引发另一个异常则为错误,如果没有引发异常则失败.
而"是一个错误"意味着"传播另一个例外".
当您捕获在try/except块中传播的异常时,您将使错误无效,并且没有任何内容可供unittest诊断.如果您的目的是将此错误变为失败(一个有争议的策略......),您的except块应该调用self.fail.
| 归档时间: |
|
| 查看次数: |
14146 次 |
| 最近记录: |