etj*_*tja 79 python unit-testing python-unittest
Python 框架setUp()
和之间的区别是什么?为什么设置要用一种方法处理另一种方法?setUpClass()
unittest
我想了解在setUp()
和setUpClass()
函数中完成哪些部分设置,以及使用tearDown()
和tearDownClass()
.
Ben*_*son 125
当您在班级中有多个测试方法时,差异就会显现出来.setUpClass
并tearDownClass
为全班运行一次; setUp
并tearDown
在每种测试方法之前和之后运行.
例如:
class Example(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
def setUp(self):
print("setUp")
def test1(self):
print("test1")
def test2(self):
print("test2")
def tearDown(self):
print("tearDown")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
Run Code Online (Sandbox Code Playgroud)
当您运行此测试时,它会打印:
setUpClass
setUp
test1
tearDown
.setUp
test2
tearDown
.tearDownClass
Run Code Online (Sandbox Code Playgroud)
(该点(.
)是unittest
当一个测试通过的缺省输出.)观察到setUp
和tearDown
之前和之后出现test1
和 test2
,而setUpClass
和tearDownClass
只出现一次,在整个测试案例的开始和结束.
setUp()
和setUpClass()
Python unittest
框架之间有什么区别?主要区别(如本杰明·霍奇森(Benjamin Hodgson)的回答中所述)是setUpClass
仅一次调用,即在所有测试之前,而setUp
在每次测试之前均被调用。(注意:这同样适用于其他xUnit测试框架中的等效方法,而不仅仅是Python的方法unittest
。)
从unittest
文档中:
setUpClass()
在运行单个类中的测试之前调用的类方法。使用类作为唯一参数调用setUpClass,并且必须将其装饰为classmethod():
@classmethod
def setUpClass(cls):
...
Run Code Online (Sandbox Code Playgroud)
和:
setUp()
调用准备测试夹具的方法。在调用测试方法之前立即调用该方法。除了AssertionError或SkipTest之外,此方法引发的任何异常都将被视为错误而不是测试失败。默认实现不执行任何操作。
问题的这一部分尚未得到回答。根据我对Gearon回答的评论,该setUp
方法适用于所有测试通用的灯具元素(以避免在每个测试中重复该代码)。我发现这通常很有用,因为删除重复项(通常)可以提高可读性并减少维护负担。
该setUpClass
方法适用于昂贵的元素,而您只需要执行一次即可,例如打开数据库连接,在文件系统上打开临时文件,加载共享库以进行测试等。在每次测试之前进行此类操作会使速度降低测试套件太多,所以我们在所有测试之前只做一次。这会使测试的独立性稍有下降,但在某些情况下是必要的优化。可以说,在单元测试中不应该这样做,因为通常可以在不使用真实内容的情况下模拟数据库/文件系统/库/任何东西。因此,我发现这setUpClass
几乎是不需要的。但是,在需要测试上述示例(或类似示例)时很有用。
归档时间: |
|
查看次数: |
24900 次 |
最近记录: |