我想为每个测试用例设置一个新的日志文件。如下所示:
import unittest
import logging
log = logging.getLogger()
class TestExample(unittest.TestCase):
def setUp(self):
next_testcase = ???
self.hdl = logging.FileHandler(
'testcase_%s.log' % next_testcase, mode='w')
log.addHandler(self.hdl)
def tearDown(self):
log.removeHandler(self.hdl)
我怎样才能找到testcase这个名字?
或者你将如何实现上述的东西?在
狡猾!:-)
这里的问题是你不知道下一个要调用的函数是哪个-不是 不会直接干扰unittest代码。在
但是,如果可能的话,将每个测试用例更改为另一种方法, 这将调用为该测试用例定制的“设置”,然后执行原始的 测试用例,它将被解决。在
换言之:需要自动更改声明类中的每个测试用例 在另一个函数中:执行个性化设置,并且它们执行 原始测试。这应该在类创建时完成。在
这可能看起来很复杂,但这是一个非常适合“元类”的工作——因为我们只是在做它们的本意:定制类的创建。在
因此,通过将TestCase的元类更改为检查类中每个项的元类- 如果它是一个测试(即,如果它的名称以“test”开头),则创建一个新的包装器函数 完成了以上功能,你就可以开始了。在
(还需要一个进一步的步骤:由于方法名和原始测试方法的(对象)在创建后必须保持不变,因此必须创建一个中间函数来保存每个测试用例的闭包。否则,下面代码中的变量
method_name
和original_method
都将在for
循环结束时为类中最后一个函数的名称和内容设置)给你:
(为了简化我这方面的测试,我注释掉了实际的日志行-“prints”运行良好,log\u setup函数中的任何代码都将在正确设置}的情况下运行。)
self
和{当然,您可以将这个metclass分解到另一个模块中,然后导入它以用于您的测试。在
相关问题 更多 >
编程相关推荐