📜  unittest assert 引发上下文管理器 (1)

📅  最后修改于: 2023-12-03 15:20:51.342000             🧑  作者: Mango

unittest assert 引发上下文管理器

简介

unittest 是 Python 标准库中用于测试的模块,它提供了一个测试框架和一组简单的断言语句,我们可以用它们来写测试用例,检查我们的代码是否正常工作。其中包含了很多常用的断言方法,如 assertEqual()assertTrue()assertFalse() 等。

在使用 assert 断言时,我们可以通过引发上下文管理器来获取更详细的错误信息。这些上下文管理器包括了 assertRaises()assertWarns()assertLogs() 等。

assertRaises()

assertRaises() 可以用来检查代码是否引发了异常,我们可以使用它来测试抛出异常的函数、方法、以及类。

使用示例:

import unittest

def divide(a, b):
    if b == 0:
        raise ValueError('division by zero')
    return a / b

class TestDivide(unittest.TestCase):
    def test_divide_by_zero(self):
        with self.assertRaises(ValueError):
            divide(4, 0)

在上面的例子中,我们定义了一个 divide() 函数,如果除数为 0,则引发 ValueError 异常。我们通过测试用例 test_divide_by_zero() 来检查是否成功引发了 ValueError 异常。

with self.assertRaises(ValueError): 可以让我们的测试用例在遇到 ValueError 异常时通过,否则测试将失败。

assertWarns()

assertWarns() 可以用来检查函数、方法、以及类是否会发出警告信息。

使用示例:

import unittest
import warnings

def deprecated():
    warnings.warn('This function is deprecated', DeprecationWarning)

class TestDeprecated(unittest.TestCase):
    def test_deprecated(self):
        with self.assertWarns(DeprecationWarning):
            deprecated()

在上面的例子中,我们定义了一个 deprecated() 函数,它发出了一个关于函数已经过时的警告。我们通过测试用例 test_deprecated() 来检查函数是否成功发出了警告。

with self.assertWarns(DeprecationWarning): 会让 test_deprecated() 测试用例在遇到 DeprecationWarning 警告时通过,否则测试将失败。

assertLogs()

assertLogs() 可以用来检查代码是否输出了日志信息,我们可以使用它来测试我们的代码是否有正确地记录日志。

使用示例:

import unittest
import logging

def test_logging():
    logging.basicConfig()
    logging.info('logging test')

class TestLogging(unittest.TestCase):
    def test_logging(self):
        with self.assertLogs(level='INFO') as logs:
            test_logging()
        self.assertIn('logging test', logs.output)

在上面的例子中,我们定义了一个 test_logging() 函数,它会输出一条日志记录。我们通过测试用例 test_logging() 来检查是否成功记录了日志。

with self.assertLogs(level='INFO') as logs: 会让 test_logging() 测试用例在记录了 INFO 级别的日志信息时通过,否则测试将失败。logs.output 可以获取所有的记录日志信息。

总结

通过使用 unittest 模块中提供的一系列断言方法,我们可以有效地测试我们的代码是否正确工作。而使用上下文管理器可以让我们获取更详细的错误信息,尽快发现并解决问题。