プロジェクトの場合、いくつかのサブコンポーネントを含む複雑なマスターオブジェクトがあります。これらのオブジェクトの設定は、次のようなさまざまなライフサイクルおよびワークフローイベントにバインドするコンストラクターインターフェイスによって制御されます。
@grok.subscribe(schema.ICustomFolder, lifecycleevent.IObjectAddedEvent)
def setup_custom_folder(folder, event):
interfaces.IConstructor(folder).setup()
@grok.subscribe(schema.ICustomFolder, lifecycleevent.IObjectModifiedEvent)
def setup_custom_folder(folder, event):
interfaces.IConstructor(folder).update()
私ができるようにしたいのは、イベントハンドラーに依存せずにコンストラクターメソッドをテストすることです。ライフサイクルイベントを回避するために、オブジェクトを直接作成してこれを実行しようとしました。
def test_custom_item_constructor(self):
master = createContent('model.master_object',
needed_attribute = 2
)
folder = createContent('model.custom_folder',
__parent__ = master
)
self.assertEqual(0, len(folder))
constructor = interfaces.IConstructor(folder)
constructor.setup()
self.assertEqual(2, len(folder))
このsetup
メソッドはCustom_Folder
、マスターオブジェクトに指定された属性に応じて、インスタンス内にいくつかのアイテムを作成します。ただし、これはハングしています。これは、どちらのオブジェクトも実際にはサイトに属していないためだと思います。そのため、権限を取得することはできません。createContent
これは、マスターオブジェクトをに変更してテストサイトの適切な部分に追加することで取得できますが、すべてcreateContentInContainer
のライフサイクルイベントがトリガーされ、コンストラクター呼び出しが実行されるため、テストできません。隔離。
これにモックオブジェクトを使用してみましたが、コンストラクター中に発生することを意図したコンテンツの作成を処理するのが面倒になりました.setup
。
これにアプローチするための最良の方法は何ですか?