2017-08-06 4 views
0

私はBoto3の既定のセッションを多く使用する従来のBoto3コードを持っています。プラシーボの既定のセッションを使用してテストBoto3コードを単位にする

import boto3 
client = boto3.client('ec2') 
client.describe_images(DryRun=False) 
... 

私はplaceboを使用して、このレガシーコードのためのユニットテストを書きたいです。

しかし、ドキュメントはすなわち

import boto3 
import placebo 

session = boto3.Session() 
pill = placebo.attach(session, data_path='/path/to/response/directory') 
pill.record() 

client = session.client('ec2') 
client.describe_images(DryRun=False) 
... 

コード(e.g.)の私の読書は、これは非常にAであるということである、コード、被試験は、常に明示的Boto3セッションを管理するために必要となることを意味するものであるようです私は熟練したPythonプログラマーではありませんが、プラシーボ・モック・フレームワークの限界です。

基本的なことを誤解していますか?これを回避する方法はありますか、セッションを明示的に渡すためにすべてのレガシーコードをリファクタリングする必要がありますか?

答えて

1

私はBoto3ユニットテスト(ref)を読んでそれを理解しました。デフォルトのセッションにプラセボを添付する

、それが明示的に設定、デフォルトのセッションをする必要があり、プラセボを呼び出す前に:

import boto3 
import placebo 

boto3.setup_default_session() 
session = boto3.DEFAULT_SESSION 
pill = placebo.attach(session, data_path='/path/to/response/directory') 
pill.record() 

client = boto3.client('ec2') 
client.describe_images(DryRun=False) 

、ちょうどこれらの4行を追加することによって、私はBoto3を記録することができ、私の遺産で呼び出しますコードを追加する必要はありません。

私はプラセボのREADMEにこれらのメモを追加するためのプルリクエストを提出します。

2

プラシーボはSessionオブジェクトを必要とし、例はすべて明示的なSessionオブジェクトの作成を示していますが、私はあなたが単に「組み込みの」Sessionオブジェクトを参照できると思います。

import boto3 
import placebo 

pill = placebo.attach(boto3.session, data_path='/path/to/response/directory') 
+0

ああ。本当にありがとう。それが動作すれば、私はドキュメントを明確にするためにPRを送るでしょう。 –

+0

いいえ、うまくいきません - 詳細を示すプロジェクトの問題を更新します。 –

関連する問題