使用assert在python中引发单元测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用assert在python中引发单元测试相关的知识,希望对你有一定的参考价值。

目前我正在为我的班级功能编写单元测试。

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])

我现在遇到的问题是我的代码中的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]
另一答案

在调用函数之前计算参数,因此当您使用test1[4]时,它会在调用self.assertRaises之前执行。所以它无法捕获异常。

这也是2参数形式具有签名assertRaises(exception, msg=None)的原因,这里的第二个参数是匹配的“msg”,而不是要调用的函数。所以在任何情况下它都不会做正确的事情。

您可以使用上下文管理器:

with self.assertRaises(IndexError):
    test1[4]

或者使用多参数形式:

self.assertRaises(IndexError, test1.__getitem__, 4)

以上是关于使用assert在python中引发单元测试的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Fluent Assertions 在不等式测试中测试异常?

【Python】assert断言

单元测试中Assert类

单元测试

Python单元测试

VS2010单元测试入门实践教程