我需要测试具有不同参数的函数,而最合适的方法似乎是使用with self.subTest(...)
上下文管理器。
但是,该函数会向db写入内容,并最终处于不一致状态。我可以删除我写的东西,但如果我可以完全重新创建整个数据库,它会更清晰。有没有办法做到这一点?
答案 0 :(得分:2)
不确定如何在self.subTest()中重新创建数据库,但我还有另一种我可能感兴趣的技术。您可以使用fixture来创建数据库的“快照”,它基本上将被复制到仅用于测试目的的第二个数据库中。我目前使用这种方法来测试我正在工作的大型项目的代码。
我会发布一些示例代码,让您了解这在实践中会是什么样子,但您可能需要做一些额外的研究来根据您的需求定制代码(我添加了链接来指导您)
这个过程相当简单。您将创建数据库的副本,其中仅包含使用灯具所需的数据,这些数据将存储在 .yaml 文件中,并且只能由您的测试单元访问。
以下是该过程的样子:
<强> generate.py 强>
django.setup()
stdout = sys.stdout
conf = [
{
'file': 'myfile.yaml',
'models': [
dict(model='your.model', pks='your, primary, keys'),
dict(model='your.model', pks='your, primary, keys')
]
}
]
for fixture in conf:
print('Processing: %s' % fixture['file'])
with open(fixture['file'], 'w') as f:
sys.stdout = FixtureAnonymiser(f)
for model in fixture['models']:
call_command('dumpdata', model.pop('model'), format='yaml',indent=4, **model)
sys.stdout.flush()
sys.stdout = stdout
<强> test_class.py 强>
from django.test import TestCase
class classTest(TestCase):
fixtures = ('myfile.yaml',)
def setUp(self):
"""setup tests cases"""
# create the object you want to test here, which will use data from the fixtures
def test_function(self):
self.assertEqual(True,True)
# write your test here
您可以在此处阅读更多内容:
如果您有任何问题,因为事情不清楚只是问,我很乐意帮助您。