私はメッセージキューとして書いた単純なpub/subモジュールを使用するコンポーネントを持っています。私はRabbitMQのような他の実装を試してみたいと思います。しかし、このバックエンドの変更を構成可能にしたいので、実装とサードパーティのモジュールをクリーンアップとテストの間で切り替えることができます。Pythonアプリケーションでコンポーネントを混ぜ合わせる最も良い方法
明白な答えは、にあるように思わ:
- は、configファイル
- を読む修正設定が遅延し、指定の実装をロードするために、ターゲット・コンポーネントを変更/ dictの
- オブジェクトを作成します。
のようなもの:
# component.py
from test.queues import Queue
class Component:
def __init__(self, Queue=Queue):
self.queue = Queue()
def publish(self, message):
self.queue.publish(message)
# queues.py
import test.settings as settings
def Queue(*args, **kwargs):
klass = settings.get('queue')
return klass(*args, **kwargs)
ないinitはキュークラスに取る必要がある場合、私はそれが簡単にテストしながら、使用されるキューを指定する際に役立つだろう把握確認を。
私が持っていた別の考えは、http://www.voidspace.org.uk/python/mock/patch.htmlのようなものでしたが、それは乱雑になるようです。アップサイドは、スワップコンポーネントをサポートするためにコードを変更する必要がないということです。
他のアイデアや逸話はご了承ください。
EDIT:インデントを修正しました。
コードのインデントを修正してください。 – unholysampler