Max*_*xxx 4 python unit-testing exception-handling
目前我正在为我的班级功能编写单元测试.
def test_getitem(self):
test1 = List(3)
for i in range(3):
test1.append(i)
self.assertEqual(test1[2], 2)
test1 = List(3)
for i in range(3):
test1.append(i)
self.assertRaises(IndexError, test1[4])
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是self.assertRaises我的代码部分.我不确定这是不是这样做但是当我运行时unittest,它会产生错误Index out of range.顺便说一下,它应该是"OK".
List是我的类,并List(3)创建一个基于数组的列表.所以,当我test1.append(i),它现在[0,1,2].
test1[2]是一种getitem在我的类中调用函数的方法self[index].
我想知道我是否断言正确提升?self.assertEqual很好.
with当您断言抛出异常时,您应该使用该语句
def test_getitem(self):
test1 = List(3)
for i in range(3):
test1.append(i)
self.assertEqual(test1[2], 2)
test1 = List(3)
for i in range(3):
test1.append(i)
with self.assertRaises(IndexError):
test1[4]
Run Code Online (Sandbox Code Playgroud)
在调用函数之前计算参数,因此在调用函数之前test1[4]执行它self.assertRaises.所以它无法捕获异常.
这也是2参数形式具有签名的原因assertRaises(exception, msg=None),这里的第二个参数是要匹配的"msg",而不是要调用的函数.所以在任何情况下它都不会做正确的事情.
您可以使用上下文管理器:
with self.assertRaises(IndexError):
test1[4]
Run Code Online (Sandbox Code Playgroud)
或者使用多参数形式:
self.assertRaises(IndexError, test1.__getitem__, 4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |