如何在使用Python的unittest模块作为测试运行器时运行初始化代码?

8 投票
4 回答
4528 浏览
提问于 2025-04-17 08:51

一个使用库的用户,怎样才能在运行库提供的测试之前,先执行自己的初始化代码(比如设置日志记录器的调试级别)呢?这里使用的是Python的unittest模块作为测试运行工具。

4 个回答

1

这个问题的答案在类似的问题中更有帮助:

如何在Python中在每个单元测试之前和之后运行特定代码

我使用了Python的setUpClass方法。

https://docs.python.org/2/library/unittest.html#unittest.TestCase.setUpClass

setUpClass()
A class method called before tests in an individual class are run. setUpClass is called with the class as the only argument and must be decorated as a classmethod():

@classmethod
def setUpClass(cls):
    ...

我这样运行我的测试:

python -m unittest discover -v
1

你可以在调用 unittest.main 之前做好准备工作。

或者你可以创建一个测试套件的子类,并运行一个 类级别的设置方法

或者你可以让测试的设置过程包含一个回调,调用用户自定义的设置方法。

2

你可以试着用pytest来运行单元测试。如果这样可以成功(很多基于unittest的测试套件都能运行),那么你可以创建一个小模块,比如叫“mymod.py”,在里面定义一个pytest的配置钩子:

# content of mymod.py
def pytest_configure():
    import logging
    logging.getLogger().setLevel(logging.WARN)

如果你现在这样执行py.test:

$ py.test -p mymmod --pyargs mylib

那么“mylib”这个包会被搜索来找测试,并且在运行测试之前,日志的级别会被修改。“-p”选项是用来指定要加载的插件,而“--pyargs”则告诉pytest先尝试导入这些参数,而不是把它们当作目录或文件名(这是默认的处理方式)。

想了解更多信息,可以访问:http://pytest.orghttp://pytest.org/latest/unittest.html

希望这对你有帮助,

holger

撰写回答