2013-05-01 14 views
7

Używam testów nosa i w dwóch oddzielnych plikach Mam dwa testy. Obydwa działają poprawnie, gdy są uruchamiane pojedynczo, ale gdy biegną razem, próbne wyniki pierwszego testu przeniosą wyniki w drugim teście. W jaki sposób mogę się upewnić, że wszystkie makiety/poprawki zostaną zresetowane po zakończeniu funkcji testowej, aby uzyskać czysty test przy każdym uruchomieniu?Python - Jak odblokować/zresetować próbę podczas testowania?

W miarę możliwości wyjaśnienie moich testów będzie szczególnie docenione. Mój pierwszy test wygląda następująco:

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]) 

A mój drugi test jest:

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

Ale wartość zwracana z Channel.all() jest nadal ustawiony na liście od pierwszej funkcji więc dostać ` "ch1" nie jest równe "channel1". Jakieś sugestie? Dziękuję bardzo!

Odpowiedz

10

Spójrz http://www.voidspace.org.uk/python/mock/patch.html

Na początku testu zainicjowania plaster i uruchomić

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

Na koniec:

p.stop() 

To zapewni, że mocks izoluje się test.

+0

Co powiesz na funkcje Mock poza łatką? Czy jedynym sposobem na zrobienie tego jest łatanie ich na początku? – golmschenk

+0

Tak. Zalecam używanie wbudowanej struktury unittest. W ten sposób możesz mieć metody setUp i tearDown do tworzenia/niszczenia poprawek. –

+0

hi @ jjia6395 wydaje się, że brakuje nawiasu lub jest za dużo? –

Powiązane problemy