2016-06-18 9 views
0

Methode Referenz ein Objekt nach hinten:Wie in einer verspottet Methode

def analyse_sentence(self, sentence, channel): 
     found_top_news = 'top news' in sentence or 'trending news' in sentence 
     if found_top_news: 
      categories = [] 
      found_categories = SharedNewsUtils.extract_categories(sentence, categories) 
      if found_categories: 
       result = self.retrieve_top_news(categories[0]) 

Unit-Test:

@patch('slack.realtime_bot.plugins.news_plugin.news.News.retrieve_top_news') 
    @patch('utils.shared_news_utils.SharedNewsUtils.extract_categories') 
    def test_analyse_sentence_calls_retrieve_top_news_if_found_categories(self, mck, mck2): 
     mck.return_value = True 
     sentence = 'trending news' 
     channel = 'D' 
     mck2.return_value = [] 
     self.news.analyse_sentence(sentence, channel) 
     self.assertTrue(mck2.called) 

Diese Einheit Test nicht mit der Meldung:

result = self.retrieve_top_news(categories[0]) IndexError: list index out of range 

Da extract_categories verspottet wird, und eine leere categories Liste innerhalb der Methode injiziert wird, weiß ich nicht, wie man das auch spottet, um die Liste aus Index später zu verhindern.

Antwort

0

Wenn extract_categories ist categories mutiert, dann sollten Sie in der Lage sein side_effect in Ihrem Test verwenden zu mutieren categories:

def mutate_categories(sentence, categories): 
    categories.append('some_item') 

mck.side_effect = mutate_categories