如何测试抛出异常的函数[重复]

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

以上是关于如何测试抛出异常的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

队列为空时抛出测试异常[重复]

TestCases 如何测试抛出的不同异常?

抛出啥异常? (Python)[重复]

如果构造函数抛出异常,是不是有更合适的测试?

如何测试 Jest 没有抛出异常?

JAVA如何抛出异常