dbr*_*dbr 9 python unit-testing
我目前有一个看起来像的unittest.TestCase ..
class test_appletrailer(unittest.TestCase):
def setup(self):
self.all_trailers = Trailers(res = "720", verbose = True)
def test_has_trailers(self):
self.failUnless(len(self.all_trailers) > 1)
# ..more tests..
Run Code Online (Sandbox Code Playgroud)
这工作正常,但Trailers()调用大约需要2秒才能运行..鉴于setUp()在每次测试运行之前调用,测试现在需要大约10秒才能运行(只有3个测试函数)
self.all_trailers在测试之间缓存变量的正确方法是什么?
删除setUp函数,并执行..
class test_appletrailer(unittest.TestCase):
all_trailers = Trailers(res = "720", verbose = True)
Run Code Online (Sandbox Code Playgroud)
..works,但它声称"在0.000s中进行3次测试"这是不正确的..我能想到的另一种方法是拥有一个cache_trailers全局变量(它工作正常,但相当可怕):
cache_trailers = None
class test_appletrailer(unittest.TestCase):
def setUp(self):
global cache_trailers
if cache_trailers is None:
cache_trailers = self.all_trailers = all_trailers = Trailers(res = "720", verbose = True)
else:
self.all_trailers = cache_trailers
Run Code Online (Sandbox Code Playgroud)
cdl*_*ary 14
使用只被初始化一次的类成员怎么样?
class test_appletrailer(unittest.TestCase):
all_trailers = None
def setup(self):
# Only initialize all_trailers once.
if self.all_trailers is None:
self.__class__.all_trailers = Trailers(res = "720", verbose = True)
Run Code Online (Sandbox Code Playgroud)
引用的查找self.all_trailers将转到MRO的下一步- self.__class__.all_trailers它将被初始化.
如果您使用的是Python> = 2.7,则可以使用setUpClass仅为整个单元测试调用一次的方法.
import unittest
from trailers import Trailers
class AppleTrailerTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
# only initialize all_trailers once
cls.all_trailers = Trailers(res='720', verbose=True)
@classmethod
def tearDownClass(cls):
# drop the reference explicitly to let the Trailers object be garbage
# collected
cls.all_trailers = None
def test_one(self):
# ...
def test_two(self):
# ...
Run Code Online (Sandbox Code Playgroud)