2013-05-01 14 views
7

Nosestest kullanıyorum ve iki ayrı dosyada iki testim var. Her ikisi de tek tek koşarken iyi çalışırlar, ancak birlikte çalıştıklarında ilk testteki alay ikinci testteki sonuçları karıştırır. Bir test fonksiyonunun tamamlanmasından sonra tüm alayların ya da yamaların sıfırlanacağını nasıl garanti ederim ki her koşuda temiz bir test yaptırdım?Python - Test sırasında sahteliği nasıl çözebilir/sıfırlayabilirsiniz?

Mümkünse, testlerimi açıklamak özellikle takdir edilecektir. `

def test_can_list_all_channels(self): 
    add_channel_with_name("channel1") 
    namelist = list_all_channel_names() 
    self.assertEqual("channel1", namelist[0]) 

Ama Channel.all geri dönüş değerini() hala bu yüzden olsun ilk işlevinden listeye ayarlanır: Benim ilk test gibi görünür:

def test_list_all_channel(self): 
    from notification.models import Channel, list_all_channel_names 
    channel1 = Mock(); 
    channel2 = Mock(); 
    channel3 = Mock(); 
    channel1.name = "ch1" 
    channel2.name = "ch2" 
    channel3.name = "ch3" 
    channel_list = [channel1, channel2, channel3] 
    Channel.all = MagicMock() 
    Channel.all.return_value = channel_list 
    print Channel 
    channel_name_list = list_all_channel_names() 
    self.assertEqual("ch1", channel_name_list[0]) 
    self.assertEqual("ch2", channel_name_list[1]) 
    self.assertEqual("ch3", channel_name_list[2]) 

Ve benim ikinci testtir "ch1", "channel1" e eşit değildir. Baska öneri? Çok teşekkürler!

p.stop() 

Bu mocks halinde yalıtılmış sağlayacaktır:

cevap

10

Eğer yama başlatmak ve sonunda

p = patch("Channel.all", new=MagicMock(return_value=channel_list)) 
p.start() 

çalıştırın testin başlangıcında http://www.voidspace.org.uk/python/mock/patch.html

bak test

+0

Bir yama dışındaki Mock işlevleri için ne yapılmalı? Bunu yapmanın tek yolu, başlamak için onları yamalamak mı? – golmschenk

+0

Evet. Yerleşik yerleşik bir çerçeve kullanmanızı tavsiye ederim. Bu şekilde yamaları oluşturmak/yok etmek için setUp ve tearDown yöntemlerine sahip olabilirsiniz. –

+0

Merhaba @ jjia6395 bir parantez eksik veya çok fazla var gibi görünüyor? –