@override_settings(....) はテストで 1 回しか実行されないため、以下の 2 つのテストの 1 つが失敗する運命にあります。データベースは一貫性が保たれるように巻き戻されますが、モデルは設定に基づいて再構成されません。したがって、デフォルト設定が True の場合、2 番目の testCaseFalse は失敗し、デフォルト設定が False の場合、testCaseTrue は失敗します。
次のコードで、両方の単体テスト ケースが機能するように、Patient モデルを強制的に再読み込みする方法を教えてください。これは、以下の 2 つのコメントアウトされた可能性ではなく、1 つの場所でのみ実行する必要があるものにしたいと考えています。DRY でありながら、これを達成するための何らかの方法である必要があります。
class Patient(models.Model):
x = models.IntegerField(null=True, blank=not settings.REQUIRE_X_FOR_PATIENT)
class PatientForm(forms.ModelForm):
#x = forms.CharField(required=settings.REQUIRE_X_FOR_PATIENT) Don't want to have to do this
class Meta:
model = Patient
#def __init__(self, *args, **kwargs): #Don't want to have to do this either
#super(PatientForm, self).__init__(*args, **kwargs)
#self.fields['x'].required = settings.REQUIRE_X_FOR_PATIENT
@override_settings(REQUIRE_X_FOR_PATIENT=True)
def testCaseTrue...
form = PatientForm()
self.assertTrue(form.fields['x'].required, "X should be required")
@override_settings(REQUIRE_X_FOR_PATIENT=False)
def testCaseFalse...
form = PatientForm()
self.assertTrue(form.fields['x'].required, "X should NOT be required")