は基本的に、私は10回以上のためにこれを行う必要があり、私は複数のモデルのために類似したURLのためにDjangoのビューのための同様のテストケースを書くより速い方法がありますか?
from django.test import RequestFactory, TestCase
class BaseApiTest(TestCase):
def setUp(self):
superuser = User.objects.create_superuser('test', '[email protected]', 'testpassword')
self.factory = RequestFactory()
self.user = superuser
self.client.login(username=superuser.username, password='testpassword')
class SomeModelApiTests(base_tests.BaseApiTest):
def test_update_with_only_1_field(self):
"""
Tests for update only 1 field
GIVEN the following shape and related are valid
WHEN we update only with just 1 field
THEN we expect the update to be successful
"""
shape_data = {
'name': 'test shape',
'name_en': 'test shape en',
'name_zh_hans': 'test shape zh hans',
'serial_number': 'test shape serial number',
'model_name': {
'some_field': '123'
}
}
data = json.dumps(shape_data)
response = self.client.post(reverse('shape-list-create'), data, 'application/json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
some_model = response.data['some_model']
new_some_field = '12345'
data = json.dumps({'some_field': new_some_field, 'id': response.data['some_model']['id']})
response = self.client.put(reverse('some-model', args=[some_model['id']]), data, 'application/json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(new_some_field, response.data['some_field'])
を同じテストケース(test_update_with_only_1_field
を)書いていることを実感します。私はすでにそれをしています。
唯一の違いたびに、これを行うためのより高速な方法があります場合、私は思っていた次の句「some_model」、「いくつかのモデル」、および「some_field」
です。
私は抽象的に二つの方法を考えることができます:
- は何とか私は、コピー&ペースト、最終的なテストケースを生成することができ、テキストエディタでテンプレートを作成します。私は崇高なテキストを使用していますが、別のテキストエディタに切り替えても構いません。
このテストケースを、個々のテストクラスが呼び出せるビヘイビアクラスに変換するという形で少し書くことができます。別名構成。
どちらが理にかなっていますか、これを行う方法は異なりますか?
BaseApiクラスもでない他のテストクラスに継承されていることに注意してください。には繰り返しテストケースメソッドがあります。
申し訳ありませんが私はペタニックだと思っていますが、構成よりも複数の継承の方があなたの2番目のソリューションではありませんか? –
実際、baseapiクラスは、繰り返しテストケースを持たない他のモデルテストクラスに継承されています。どのようにして2番目の解決策が変わるでしょうか? –
それは本当に複数の継承です、私は私の答えを編集しました。 2番目のコメントに答えるには、 'test_update_should_work'と他の共有メソッドを' BaseApiTestCase'ではなくmixinで動かすだけです。そうすればModelTestCaseは 'class ModelTestCase(BaseTestCase、RepetitiveTestCaseMixin)'のようになります... だからあなたは 'RepetitiveTestCaseMixin'を継承するかどうかを選択する必要があります(私の答えをこのように編集しました) –