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 次 |
最近记录: |