我使用nosetest作为我的测试框架,我的所有测试都是函数 测试函数不在类中。
我没有用设置来装饰每个功能,而是希望定义一个设置&拆解功能,一次写入并在模块中每次测试之前和之后运行。
有没有人知道这是一种优雅的方式?
答案 0 :(得分:2)
这是unittest
的默认行为:
test.py:
import unittest
class TestFixture(unittest.TestCase):
def setUp(self):
print "setting up"
def tearDown(self):
print "tearing down"
def test_sample1(self):
print "test1"
def test_sample2(self):
print "test2"
这是做什么的:
$ python -m unittest test
setting up
test1
tearing down
.setting up
test2
tearing down
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
答案 1 :(得分:1)
这可能不太优雅,但它会完成工作。首先,在定义测试的包中,写入decorators.py
文件:
def setup_func():
"set up test fixtures"
def teardown_func():
"tear down test fixtures"
然后,在tests.py
文件中,导入以下内容:
from decorators import setup_func, teardown_func
from inspect import getmodule
from nose.tools import with_setup
from types import FunctionType
从这里开始,您可以像往常一样定义所有测试。完成后,在文件的最底部写下:
for k, v in globals().items():
if isinstance(v, FunctionType) and getmodule(v).__name__ == __name__:
v = with_setup(setup_func, teardown_func)(v)
这将使用设置和拆卸程序修饰tests.py
中定义的每个函数(而不是导入的函数)。
但重要的是,即使是不符合nose
测试标准的功能也会被修饰。因此,辅助函数和实用函数将被装饰以及其他函数。在绝大多数情况下,这将是一个相当安全的操作。但是,如果你担心它会以某种方式破坏你的实际测试,你可以在另一个模块中定义它们并将它们导入。
编辑:所以这一切都有效,它适合您正在寻找的非常狭窄的解决方案。没有课程,每个功能装饰,没有手动@with_setup
装饰等。但是,我强烈建议您将测试功能移到TestCase
。它是无痛的,便携式的,它是对具有相同设置和拆卸的测试进行分组的标准方法。