2012-01-10 27 views
6

Herkes yazdıktan sonra geçişin kendisini test etmenin bir yolunu biliyor mu? Benim DataMigrations Çok birçok kez benDjango'da güney geçişleri test etme

Güney kongre numaraları ile geçişleri başlamaktır varsayılan vb böylece ölemezsin, True varsayılan değerin yerine, yanlış normalleştirmemeleri için False gibi aptal ince hataları tespit ettik hatta __import__ kullanmadan bunları içe aktarın. Benzer bir probleme rastlayan var mı? İnsanlar bunları nasıl çözer?

En belirgin yaklaşım, geçiş mantığını ayrı bir içe aktarılmış modülde tutmak ve bunu sınamaktır, ancak bu biraz rahatsız edici olabilir.

+0

Neden sadece yeni şemayı sınayan birim testleri yazmıyorsunuz? Örneğin, bir değer belirtmeden bir model oluşturun ve doğru varsayılanın kullanıldığını kontrol edin. –

+0

@Michael: Şemamigrasyonlar için sorun değil, ancak veri göçlerinde bir hata bulamayacak. – jammon

+0

Bu durumda, geçiş sınaması için bir veritabanı oluşturabilir, örnek verilerle doldurabilir, geçişi çalıştırabilir ve son değerleri test edebilirsiniz. –

cevap

2

Aynı soruna rastladım.

from django.conf import settings 

class MyModel(models.Model): 
    stupid_error = models.BooleanField(default=False) 

    def __init__(self, *args, **kwargs): 
     super(MyModel, self).__init__(*args, **kwargs) 
     if settings.DEBUG: 
      assert not self.stupid_error 

Tamam, biraz aksak var: Ben datamigrations için testler yapmak için bir yol bulamadık beri, bozuk verileri algılamak için iddialarını kullandı. Ama işe yarıyor gibi görünüyor.

[Düzeltme] Tekrar düşününce daha iyi bir çözüm buldum: testleri DataMigration'ın kendisine koydu. Bir geçiş bir kerelik kod olduğundan, tekrar tekrar test edilmek zorunda değildir.

class Migration(DataMigration): 
    def forwards(self, orm): 
     # lots of awesome migration code here 
     # ... 
     for m in orm.MyModel.objects.all(): 
      assert not m.stupid_error 
+0

Bilmiyorsunuz, birlikte olmayan şeyleri karıştırıyorsunuz, testler bir şeydir ve göçler başka bir şey .... – Arruda

0

Güneyde oldukça yeniyim, ancak birkaç kez kullandım, birim testleri de kullandım ve sonra da ./ manage.py test geçişleri de gerçekleştirdi, bu zaten çok sayıda hata buluyordu. Ancak, bu muhtemelen her durumda çalışmaz (bence bu geçişler yürütüldüğünde test veritabanında veri yoktur).