【问题标题】: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:他说的是单元测试。

标签: python exception


【解决方案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
猜你喜欢
  • 2015-06-04
  • 2016-06-16
  • 2020-06-22
  • 2018-12-10
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2020-12-04
相关资源
最近更新 更多