首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确测试带参数的assertRaised?

如何正确测试带参数的assertRaised?
EN

Stack Overflow用户
提问于 2020-12-08 20:48:29
回答 1查看 17关注 0票数 0

我正在尝试测试(使用unittest.TestCase),当一个无效值被传递给存放方法时,是否会引发ValueError异常,但当它被引发时,测试就会失败。我已经在调试器中单步执行了测试,它确实到达了raise ValueError行,但由于某些原因,测试仍然失败。我甚至尝试过引发和断言其他异常,但测试仍然失败。

Here is a debug image

我的方法是:

代码语言:javascript
运行
复制
    def deposit(self, amount):
        if (not isinstance(amount, float)) and (not isinstance(amount, int)):
            raise ValueError

我的测试:

代码语言:javascript
运行
复制
    def test_illegal_deposit_raises_exception(self):
        self.assertRaises(ValueError, self.account.deposit("Money"))

然后我想它可能失败了,因为异常还没有被捕捉到。因此,我在对象的类中添加了一个方法来调用deposit方法来捕获ValueError异常。

代码语言:javascript
运行
复制
    def aMethod(self):
        try:
            self.deposit("Money")
        except ValueError:
            print("ValueError was caught")

然而,现在测试失败了,因为我得到了一个TypeError异常。Here is an other debug image

代码语言:javascript
运行
复制
TypeError: 'NoneType' object is not callable

谁能解释一下为什么我会得到一个TypeError异常,而不是我引发的ValueError异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-09 11:53:22

在看了Daryl Spitzer的this answer之后,我能够让它工作起来。因为deposit方法有传递给它的参数,所以我需要在断言中而不是在方法中指定它们。

测试异常的正确方法是:

代码语言:javascript
运行
复制
self.assertRaises(ValueError, self.account.deposit, "Money")

错误的方式:

代码语言:javascript
运行
复制
self.assertRaises(ValueError, self.account.deposit("Money"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65199251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档