Kes*_*dal 68 python unit-testing
我的Python版本是2.6.
我想只执行一次测试setUp方法,因为我在那里做所有测试都需要的东西.
我的想法是创建一个布尔变量,在第一次执行后将设置为'true',然后禁用多次调用setup方法.
class mySelTest(unittest.TestCase):
setup_done = False
def setUp(self):
print str(self.setup_done)
if self.setup_done:
return
self.setup_done = True
print str(self.setup_done)
Run Code Online (Sandbox Code Playgroud)
输出:
False
True
--- Test 1 ---
False
True
--- Test 2 ---
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我错过了什么吗?
Dan*_*man 97
您可以使用它setUpClass来定义每个testsuite只运行一次的方法.
Che*_*ary 56
Daniel的回答是正确的,但是这里有一个例子可以避免我发现的一些常见错误,例如super()在是(如in 或)的子类setUpClass()时不调用.TestCaseunittest.TestCasedjango.testfalcon.testing
该文档setUpClass()没有提到您需要super()在这种情况下调用.如果不这样做,您将收到错误,如相关问题所示.
class SomeTest(TestCase):
def setUp(self):
self.user1 = UserProfile.objects.create_user(resource=SomeTest.the_resource)
@classmethod
def setUpClass(cls):
""" get_some_resource() is slow, to avoid calling it for each test use setUpClass()
and store the result as class variable
"""
super(SomeTest, cls).setUpClass()
cls.the_resource = get_some_resource()
Run Code Online (Sandbox Code Playgroud)
我正在使用 Python 3,发现该cls参考也可以在该setup方法中使用,因此以下方法有效:
class TestThing(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.thing = Thing() # the `thing` is only instantiated once
def setup(self):
self.thing = TestThing.thing # ...but set on each test case instance
def test_the_thing(self):
self.assertTrue(self.thing is not None)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39644 次 |
| 最近记录: |