当我创建unittest.TestCase
时,我可以定义一个setUp()
函数,该函数将在该测试用例中的每个测试之前运行。是否可以跳过setUp()
进行单个特定测试?
对于给定的测试,想要跳过setUp()
可能不是一个好习惯。我对单元测试相当新,欢迎任何有关该主题的建议。
答案 0 :(得分:10)
来自docs(斜体矿):
unittest.TestCase.setUp()
调用准备测试夹具的方法。在调用测试方法之前立即调用它;提出的任何例外 此方法将被视为错误而非测试失败。 默认实现不执行任何操作。
因此,如果您不需要任何设置,请不要覆盖unittest.TestCase.setUp
。
但是,如果您的某个test_*
方法不需要设置而其他方法不需要,我建议将其放在单独的类中。
答案 1 :(得分:8)
在setUp()中,self._testMethodName包含将要执行的测试的名称。当然,把测试放到不同的课程或其他什么东西可能会更好,但它就在那里。
答案 2 :(得分:0)
用户可以根据其文档字符串跳过某些测试方法,例如以下示例:
import unittest
class simpleTest2(unittest.TestCase):
def setUp(self):
self.a = 10
self.b = 20
name = self.shortDescription()
if name == "add":
self.a = 10
self.b = 20
print name, self.a, self.b
if name == "sub":
self.a = 50
self.b = 60
print name, self.a, self.b
def tearDown(self):
print '\nend of test',self.shortDescription()
def testadd(self):
"""add"""
result = self.a+self.b
self.assertTrue(result == 30)
def testsub(self):
"""sub"""
result = self.a-self.b
self.assertTrue(result == -10)
if __name__ == '__main__':
unittest.main()
如果setup()方法用于除一个例外之外的大多数测试方法,则可以根据文档字符串的比较直接返回是否满足该方法。
答案 3 :(得分:0)
您可以使用Django的@tag装饰器作为跳过setUp的条件
#The test which you want to skip setUp
@tag('skip_setup')
def test_mytest(self):
assert True
def setUp(self):
method = getattr(self,self._testMethodName)
tags = getattr(method,'tags', {})
if 'skip_setup' in tags:
return #setUp skipped
#do_stuff if not skipped
除了跳过之外,您还可以使用标签进行不同的设置。
P.S。如果您不使用Django,那么该装饰器的source code确实很简单:
def tag(*tags): """ Decorator to add tags to a test class or method. """ def decorator(obj): setattr(obj, 'tags', set(tags)) return obj return decorator