当前位置:  开发笔记 > 编程语言 > 正文

Python unittest与昂贵的设置

如何解决《Pythonunittest与昂贵的设置》经验,为你挑选了2个好方法。

我的测试文件基本上是:

class Test(unittest.TestCase):
    def testOk():
        pass

if __name__ == "__main__":
    expensiveSetup()
    try:
        unittest.main()
    finally:
        cleanUp()

但是,我确实希望通过Netbeans测试工具运行我的测试,为此,我需要不依赖于在main中完成的环境设置的单元测试.综观单元测试使用Python安装程序的缓存结果() -它建议使用鼻子.但是,我不认为Netbeans支持这一点.我没有找到任何表明它的信息.另外,我是这里唯一一个实际编写测试的人,所以除非需要,否则我不想为其他2个开发人员引入额外的依赖项.

对于TestSuite中的所有测试,如何进行一次设置和清理?

这里昂贵的设置是创建一些带有虚拟数据的文件,以及设置和拆除一个简单的xml-rpc服务器.我还有2个测试类,一个在本地测试,另一个在xml-rpc上测试所有方法.



1> Mekk..:

如果你使用Python> = 2.7(或者unittest2 for Python> = 2.4&<= 2.6),最好的方法是使用

def setUpClass(cls):
    # ...
setUpClass = classmethod(setUpClass)

为属于给定类的所有测试执行一次初始化.

要执行清理,请使用:

@classmethod
def tearDownClass(cls):
    # ...

另请参阅setUpClass和tearDownClass classmethods上的unittest标准库文档.



2> Tal Weiss..:

这就是我做的:

class TestSearch(unittest.TestCase):
    """General Search tests for...."""

    matcher = None
    counter      = 0
    num_of_tests = None

    def setUp(self): # pylint: disable-msg=C0103 
        """Only instantiate the matcher once"""
        if self.matcher is None:
            self.__class__.matcher = Matcher()
            self.__class__.num_of_tests = len(filter(self.isTestMethod, dir(self)))
        self.__class__.counter = self.counter + 1 

    def tearDown(self): # pylint: disable-msg=C0103
        """And kill it when done"""
        if self.counter == self.num_of_tests:
            print 'KILL KILL KILL'
            del self.__class__.matcher

可悲的是(因为我确实希望我的测试是独立的和确定的),我做了很多(因为系统测试花费不到5分钟也很重要).

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有