異なるパラメータで関数をテストする必要があります。このための最も適切な方法は、with self.subTest(...)
コンテキストマネージャを使用しているようです。Django TestCase:self.subTest(...)のデータベースを再作成
ただし、この関数はdbに何かを書きますが、矛盾した状態になります。私が書き込むものは削除することができますが、データベース全体を完全に再作成することができれば、よりクリーンになります。それを行う方法はありますか?
異なるパラメータで関数をテストする必要があります。このための最も適切な方法は、with self.subTest(...)
コンテキストマネージャを使用しているようです。Django TestCase:self.subTest(...)のデータベースを再作成
ただし、この関数はdbに何かを書きますが、矛盾した状態になります。私が書き込むものは削除することができますが、データベース全体を完全に再作成することができれば、よりクリーンになります。それを行う方法はありますか?
self.subTest()でデータベースを再作成する方法がわかりませんが、私が現在使用している別のテクニックがあります。フィクスチャを使用してデータベースの「スナップショット」を作成することができます。このスナップショットは、基本的にテスト目的でのみ使用される第2のデータベースにコピーされます。私は現在、この方法を使って仕事中の大きなプロジェクトでコードをテストしています。
これは実際にどのように見えるかを示すためのサンプルコードを投稿しますが、必要に応じてコードを調整するために余分なリサーチを行う必要があります(私は)。
このプロセスはかなり複雑です。あなたは、.yamlファイルに格納され、テストユニットのみがアクセスする、フィクスチャを使用して必要なデータだけでデータベースのコピーを作成します。
は次のようにプロセスが見えるものです。これは、db全体を愚かにコピーするのではなく、必要なデータを持つdbを作成するだけです。それは.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
あなたはもっとここまで読むことができます:
あなたの場合物事が不明確であるだけの質問があるので、私はあなたを助けてくれるでしょう。
ありがとうございます。私はそれをよく見るためにある程度の時間が必要です。私はそれを理解するとすぐにそれを受け入れます。 – Ibolit
はい、当然のことながら、完全なコードが正しく動作するのを見るまでは、まったく混乱しています。そのため、疑問と私はあなたを正しい方向に導こうとします。 –
@Ibolitあなたは何かを働かせたり、別の解決策を見つけることができましたか? –