如何在NoneType对象中正确地使用单元测试的断言Raises()?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我做了一个简单的测试用例:

def setUp(self):

  self.testListNone = None

def testListSlicing(self):

  self.assertRaises(TypeError, self.testListNone[:1])

我期待测试通过,但我得到例外:

Traceback (most recent call last):

    self.assertRaises(TypeError, self.testListNone[:1])

TypeError: 'NoneType' object is unsubscriptable

我认为assertRaises会自TypeError异常将被提升后通过?

提问于
用户回答回答于

如果你使用python2.7或更高版本,则可以使用assertRaises作为上下文管理器的功能,并执行以下操作:

with self.assertRaises(TypeError):
    self.testListNone[:1]

如果你正在使用python2.6,除了现在使用的另一种方式是使用unittest2,它是python2.6单元测试新功能的后端,你可以使用上面的代码使它工作。

NB:我是单元测试新特性(SkipTest,测试发现...)的忠实粉丝,所以我打算尽可能多地使用unittest2。我建议做同样的事情,因为python2.6中有很多单元测试。

用户回答回答于

问题在于被调用TypeError之前被'提取'的assertRaisesget,因为在调用assertRaises该方法之前需要评估参数。你需要传递一个lambda表达式,如:

self.assertRaises(TypeError, lambda: self.testListNone[:1])

扫码关注云+社区