📅  最后修改于: 2023-12-03 15:20:51.342000             🧑  作者: Mango
unittest
是 Python 标准库中用于测试的模块,它提供了一个测试框架和一组简单的断言语句,我们可以用它们来写测试用例,检查我们的代码是否正常工作。其中包含了很多常用的断言方法,如 assertEqual()
、assertTrue()
、assertFalse()
等。
在使用 assert
断言时,我们可以通过引发上下文管理器来获取更详细的错误信息。这些上下文管理器包括了 assertRaises()
、assertWarns()
、assertLogs()
等。
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()
可以用来检查函数、方法、以及类是否会发出警告信息。
使用示例:
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()
可以用来检查代码是否输出了日志信息,我们可以使用它来测试我们的代码是否有正确地记录日志。
使用示例:
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
模块中提供的一系列断言方法,我们可以有效地测试我们的代码是否正确工作。而使用上下文管理器可以让我们获取更详细的错误信息,尽快发现并解决问题。