python UnitTest-如何转换;加上;要设置/拆卸的子句
我有一个充满测试的类,它以python UnitTest-如何转换;加上;要设置/拆卸的子句,python,python-unittest,Python,Python Unittest,我有一个充满测试的类,它以with子句开始,以设置一组复杂的环境和资源。每一行都很长而且重复 我想将它们转换为单个实现,如setUp()和teardDown() 基本上我想要的是: def setUp(self): self.unit = # some long initialisation def tearDown(self): self.unit.__exit__() 例如:假设这被简化为使用open() 类SomeTest(unittes
with
子句开始,以设置一组复杂的环境和资源。每一行都很长而且重复
我想将它们转换为单个实现,如setUp()
和teardDown()
基本上我想要的是:
def setUp(self):
self.unit = # some long initialisation
def tearDown(self):
self.unit.__exit__()
例如:假设这被简化为使用open()
类SomeTest(unittest.TestCase):
def测试_1(自身):
将open('filename','r')作为f:
#用f做测试
...
def测试_100(自身):
将open('filename','r')作为f:
#用f做测试
我会把它转换成:
类SomeTest(unittest.TestCase):
def设置(自):
self.f=打开(“文件名”,“r”)
def拆卸(自):
self.f.close()
def测试_1(自身):
#使用self.f进行测试
...
def测试_100(自身):
#使用self.f进行测试
现在,这是因为该文件有一个通用的、易于复制的\uuuuuuuuuuuuuuuuuuuuu
等价物,即close()
在我们的例子中,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
处理程序相当复杂,依赖于类型,并且是有状态的,并且(除了测试目的之外)我们不想公开类似
是否有某种方法可以适当地调用
\uuu exit\uuu
?或者在每个测试用例周围将与as
子句集成?正如我所评论的,我认为在tearDown
方法中调用self.cm.\uu exit\uu(None,None,None)
会很好
def tearDown(self):
self.cm.__exit__(None, None, None)
然而,我想到了另一种你可以尝试的模式:
from contextlib import contextmanager
import unittest
class SomeTest(unittest.TestCase):
@contextmanager
def harness(self):
with open('file.txt', 'r') as f1, open('file2.txt', 'w') as f2:
try:
yield f1, f2
finally:
pass
def test_one(self):
with self.harness() as (f1, f2):
pass
正如我所评论的,我认为在
tearDown
方法中调用self.cm.\uuu退出(None,None,None)
会很好
def tearDown(self):
self.cm.__exit__(None, None, None)
然而,我想到了另一种你可以尝试的模式:
from contextlib import contextmanager
import unittest
class SomeTest(unittest.TestCase):
@contextmanager
def harness(self):
with open('file.txt', 'r') as f1, open('file2.txt', 'w') as f2:
try:
yield f1, f2
finally:
pass
def test_one(self):
with self.harness() as (f1, f2):
pass
最后,装饰程序可能比
设置
,拆卸
(跳过许多参数)更优雅
最后,装饰程序可能比
设置
,拆卸
(跳过许多参数)更优雅
你试过打电话给self.cm.\uuu exit.\uuu(无,无,无)?不,我没有-我期待有更优雅的东西你试过打电话给self.cm.\uu exit.\uu(无,无,无)?不,我没有-我期待有更优雅的东西谢谢-
\uu exit.\uu(无,…)
可能确实有效,但它似乎不“正确”-我希望找到更优雅的解决方案。您有一个避免复杂行的好例子。我还将研究测试的直接装饰。谢谢-\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(无)
可能确实有效,但它似乎不“正确”“-我希望有更优雅的解决方案。你有一个很好的例子来避免复杂的线。我还将研究测试的直接装饰。