Python spöttische Drittanbieter-Module

Ich versuche, einige Klassen zu testen, die Tweets verarbeiten. Im mit sixohsix twitter, um mit Twitter-API umzugehen. Ich habe eine Klasse, die als Fassade für die Twitter-Klassen fungiert, und meine Idee war, die tatsächlichen sixohsix Klassen zu verspotten, um die Ankunft von Tweets zu simulieren, indem sie zufällig neue Tweets erzeugen oder sie aus einer Datenbank abholen.

Meine Fassade sieht so aus wie:

from twitter import TwitterStream class TwitterFacade(object): def __init__(self, dev='soom'): self._auth = OAuth(dev_keys["ACCESS_TOKEN"], dev_keys["ACCESS_SECRET"], dev_keys["CONSUMER_KEY"], dev_keys["CONSUMER_SECRET"]) def tweets(self, callback=None, users=[], terms=[], locations=[], count=5): t = TwitterStream(auth=self._auth) args = {} if users: args['follow'] = ",".join(users) if terms: args['track'] = ",".join(terms) if locations: args['locations'] = ",".join(str(l) for l in locations) # this controls the general loop, it re-enters if there was an exception, # otherwise the for loop should take care of looping trough the tweets cant = count while cant > 0: try: iterator = t.statuses.filter(**args) for twit in iterator: if twit.get('text'): callback(twit) cant -= 1 if cant == 0: iterator.close() break except Exception as e: print e #some error handling code 

Also, wenn in einem Unbekannten möchte ich ein Modul testen, das etwas mit den Tweets macht, wie würde ich die TwitterStream-Klasse verspotten? Ich habe versucht, Mock zu benutzen:

 from mock import patch from twitter_facade import TwitterFacade class TwitterStreamProxy(object): def __init__(self): pass #some code for dealing with statuses.filter(..) @patch('twitter.TwitterStream', TwitterStreamProxy()) def test_filter_on_tweets(): facade = TwitterFacade() facade.tweets(somemethod, [], ['term1', 'term2'], [], count=50) def somemethod(tweet): #some logic in here 

Das funktioniert nicht, twitter api ist noch angerufen. Ich hätte erwartet, dass sincen ich didnt fügen Sie alle Code, um die Mock-Klasse hätte ich einen Fehler oder etwas bekommen, aber sixohsix twitter Klassen wo angerufen statt.

One Solution collect form web for “Python spöttische Drittanbieter-Module”

Sie müssen das lokale Objekt patch; Ihr Modul hat einen Verweis auf das TwitterStream Objekt, Patch, dass:

 @patch('yourmodule.TwitterStream', TwitterStreamProxy()) 

Sehen Sie die Mock Wo zu Patch Dokumentation.

  • Eine Liste aller Module im aktuellen Paket erhalten
  • Verwalten von Protokollen / Warnungen in Python-Erweiterungen
  • Einstellung pycharm laufen django unittest
  • Wie man Argumente an ein UnitTest ohne globale Variablen sendet
  • Django / Python unittesting: Wie Force Exception of Try / Except Block zu erzwingen
  • Nase nicht laufen Django Dokthen
  • Wie benutzt man ein Befehlszeilenargument in unittest?
  • Bei der Verwendung von unittest.mock.patch, warum ist autospec nicht true standardmäßig?
  • AttributeError: <module '__main__' von [..] hat nicht das Attribut 'open'
  • Warum könnte dieser Code eventuell einen Testfall ausfallen?
  • Wie kann man die Verbosität in python unittest erhöhen?
  • Python ist die beste Programmiersprache der Welt.