如何测试抛出异常的函数[重复]
Posted
技术标签:
【中文标题】如何测试抛出异常的函数[重复]【英文标题】:How to test functions that throw exceptions [duplicate] 【发布时间】:2012-11-19 10:16:48 【问题描述】:可能重复:How do you test that a Python function throws an exception?
我必须进行白盒和黑盒测试,所以我想知道如何测试一个引发异常的函数,比如这个
class validator_client():
def validate_client(self,client):
erori=[]
if client.get_identitate()=="":
erori.append("Nu exista ID!")
if client.get_nume()=="":
erori.append("Nu exista nume!")
if (client.get_filme_inchiriate()!="da" ) and (client.get_filme_inchiriate()!="nu") :
erori.append("Campul 'Filme inchiriate' completat gresit!")
if len(erori)>0:
raise ValidatorException(erori)
我已经阅读了一些关于 assertRises() 的内容,但我无法使用此方法导入模块,在 stackowerflow 上找到了这个:
from testcase import TestCase
import mymod
class MyTestCase(TestCase):
def test1(self):
self.assertRaisesWithMessage(SomeCoolException,
'expected message',
mymod.myfunc)
但我无法让它工作。
【问题讨论】:
你想要什么结果?你想创建一个引发异常的函数吗?就这样做吧。你想抓住它吗?使用 try-except 块。你想要别的东西吗?让自己更清楚。 好吧,我必须测试函数的所有分支,例如我如何断言或类似的东西,客户没有得到“身份”,我希望能够期待并提出它在测试中类似于 assertRises("Nu exists ID!",validate_client) 我还不太清楚。你想测试一个对象是否有一个可调用的成员吗?您可以使用if hasattr (obj, 'membername') and callable (obj.membername)
进行检查。您认为该函数引发异常是一个问题。它有什么问题?
我必须为项目中的所有函数编写测试代码这是一个验证函数,我必须测试所有的可能性,例如如果有人忘记输入 ID,然后函数引发异常,我的问题是如何编写一个查看异常的测试代码,确保是正确的异常,然后通过测试而不引发任何东西......
@BasWijnen:他说的是单元测试。
【参考方案1】:
这是一个工作示例,它是您将在 python 文档中找到的简化版本。它检查random.shuffle
是否引发了TypeError
异常。
import random, unittest
class TestSequenceFunctions(unittest.TestCase):
def test_shuffle(self):
self.assertRaises(TypeError, random.shuffle, (1,2,3))
unittest.main()
【讨论】:
我遇到的问题是我不能使用 self.assertRaises() ,我得到一个未定义的错误......有什么想法吗?我使用 python 2.7 你必须让你的类派生自 unittest.TestCase。函数在那里定义。 我做了,但我仍然收到错误 @JackRobinson:在您的示例代码中,您有from testcase import TestCase
。你想要的是from unittest import TestCase
。以上是关于如何测试抛出异常的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章