如何解决如何使用NoneType对象正确使用单元测试的assertRaises? [重复]
| 这个问题已经在这里有了答案:解决方法
如果您使用的是python2.7或更高版本,则可以将assertRaises用作上下文管理器并执行以下操作:
with self.assertRaises(TypeError):
self.testListNone[:1]
如果您正在使用python2.6,那么到目前为止,除了使用给定方法之外,另一种方法是使用unittest2,它是unittest新功能到python2.6的后向端口,您可以使用上面的代码来使其工作。
N.B:我非常喜欢unittest的新功能(SkipTest,测试发现...),所以我打算尽可能多地使用unittest2。我建议您这样做,因为除了python2.6 <中的unittest之外,还有很多其他内容。
,问题在于TypeError
被提高\'before \'raised2ѭ被调用,因为在调用该方法之前需要评估assertRaises
的参数。您需要传递lambda
表达式,例如:
self.assertRaises(TypeError,lambda: self.testListNone[:1])
,使用assertRaises
的通常方法是调用一个函数:
self.assertRaises(TypeError,test_function,args)
测试函数调用test_function(args)引发TypeError。
self.testListNone[:1]
的问题在于,在调用assertRaises
方法之前,Python会立即对表达式求值。为何将test_function
和args
作为单独的参数传递给self.assertRaises
的全部原因是允许assertRaises
从try...except
块中调用test_function(args)
,从而允许assertRaises
捕获异常。
由于您已经定义了self.testListNone = None
,并且需要一个函数来调用,因此您可以像这样使用operator.itemgetter:
import operator
self.assertRaises(TypeError,operator.itemgetter,(self.testListNone,slice(None,1)))
以来
operator.itemgetter(self.testListNone,1))
是ѭ8的a语,但将函数(ѭ21)与参数分开。
,完整的代码段如下所示。它扩展了@mouad对错误消息的断言的答案(或者通常是11的22表示),这可能很有用。
from unittest import TestCase
class TestNoneTypeError(TestCase):
def setUp(self):
self.testListNone = None
def testListSlicing(self):
with self.assertRaises(TypeError) as ctx:
self.testListNone[:1]
self.assertEqual(\"\'NoneType\' object is not subscriptable\",str(ctx.exception))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。