Python Unittest(六)中如何编写高效的单元测试用例?

2026-05-26 16:252阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计552个文字,预计阅读时间需要3分钟。

Python Unittest(六)中如何编写高效的单元测试用例?

预期失败装饰符+预期失败装饰符适用于反例测试的场景,明确知道会出错的,或者异常的测试场景下,会使我们的测试方法执行失败。同时,如果使用此装饰符,可以标定测试‘失败’。

Python Unittest(六)中如何编写高效的单元测试用例?

​Expected failures装饰符​

Expected failures装饰符比较适用于反例测试的场景,明知会出错的,或者异常的测试场景下,会使得我们的测试方法执行失败,同时如果使用此装饰符可以标定测试方法执行结果符合预期,标定为Pass.以实例来说明Expected failures的用法。代码如下。

import unittest

class TheTestCase(unittest.TestCase):
@unittest.expectedFailure
def test_method1(self):
self.assertEqual(1+5,3*3,"两个表达式结果不等")

if __name__ == '__main__':
unittest.main()

以上代码执行结果如下。

如果去掉expectedFailure装饰符,那么执行结果如下,发现在没有此装饰符的情况下,执行结果失败。

如何实现循环执行反例集合

对于Python代码来说,如果遇到错误或异常,会直接报错,然后退出当前程序的执行。如果是要循环执行一些反例时,就会出现有些例子是执行不到的。此时可以利用unittest的subTest()的上下文管理器功能去实现循环执行反例的目的。以如下实例演示用法。

import unittest

class TestSubTest(unittest.TestCase):


def test_remainder(self):
"""
0 到 10之间所有整数除以2的余数是否为0
"""
for i in range(0, 11):
with self.subTest(i=i):
self.assertEqual(i % 2, 0)


if __name__ == '__main__':
unittest.main()

执行结果是,会发现在循环体的执行过程中,所有的反例都执行到位。

如果在上面案例中不使用subTest 上下文管理器,那么执行结果如下,发现碰到第一次错误之后,整个循环体的执行就结束了。这就是区别。

如果大家想掌握第一手的资讯更新,请关注公众号“测试DAO”。

本文共计552个文字,预计阅读时间需要3分钟。

Python Unittest(六)中如何编写高效的单元测试用例?

预期失败装饰符+预期失败装饰符适用于反例测试的场景,明确知道会出错的,或者异常的测试场景下,会使我们的测试方法执行失败。同时,如果使用此装饰符,可以标定测试‘失败’。

Python Unittest(六)中如何编写高效的单元测试用例?

​Expected failures装饰符​

Expected failures装饰符比较适用于反例测试的场景,明知会出错的,或者异常的测试场景下,会使得我们的测试方法执行失败,同时如果使用此装饰符可以标定测试方法执行结果符合预期,标定为Pass.以实例来说明Expected failures的用法。代码如下。

import unittest

class TheTestCase(unittest.TestCase):
@unittest.expectedFailure
def test_method1(self):
self.assertEqual(1+5,3*3,"两个表达式结果不等")

if __name__ == '__main__':
unittest.main()

以上代码执行结果如下。

如果去掉expectedFailure装饰符,那么执行结果如下,发现在没有此装饰符的情况下,执行结果失败。

如何实现循环执行反例集合

对于Python代码来说,如果遇到错误或异常,会直接报错,然后退出当前程序的执行。如果是要循环执行一些反例时,就会出现有些例子是执行不到的。此时可以利用unittest的subTest()的上下文管理器功能去实现循环执行反例的目的。以如下实例演示用法。

import unittest

class TestSubTest(unittest.TestCase):


def test_remainder(self):
"""
0 到 10之间所有整数除以2的余数是否为0
"""
for i in range(0, 11):
with self.subTest(i=i):
self.assertEqual(i % 2, 0)


if __name__ == '__main__':
unittest.main()

执行结果是,会发现在循环体的执行过程中,所有的反例都执行到位。

如果在上面案例中不使用subTest 上下文管理器,那么执行结果如下,发现碰到第一次错误之后,整个循环体的执行就结束了。这就是区别。

如果大家想掌握第一手的资讯更新,请关注公众号“测试DAO”。