辞書のターンを生成する方法に工場出荷時の少年の複雑なオブジェクト

最近インターフェースのテスト、インタフェースオブジェクトインスタンス工場少年を生成するために、辞書にそのオブジェクトをやって、最後にリクエスト要求を介して送信されます。

辞書にオブジェクト、現在のアプローチは、オブジェクト.__ dict__に知られています。この方法は、非常に簡単(ここでは、属性値はSTRとINTであることを意味します)通常のオブジェクトに使用される複雑なオブジェクト(他のオブジェクトのインスタンスの属性値)の場合には適用されません。

インターネット上で見つかりません該当コード、我々は唯一の不格好自分自身を書くことができ、現在の属性値が対応している場合のSTR、INT、オブジェクトとのリストであります

1つの デフobjecttodict(OBJ):
 2      dict_o = OBJ。__dict__ 
3      のためのキー、値dict_o.items():
 4          プリント(キー、タイプ(値))
 5          場合でisinstance(値、(STR、INT)): 不处理STR、INT的情况
6              パス
7          ELIFのでisinstance(値、リスト):#1 处理リスト的情况
8              VALUELIST = []
 9              のために L における値:
 10                  場合でisinstance(L、(STR、INT)):
 11                      valuelist.append(L)
 12                 13である                     valuelist.append(objecttodict(L))
 14              dict_o [キー] = VALUELIST
 15          のelif でisinstance(値、辞書):
 16              パス#は、辞書のケースを処理しません
。17          一般的なオブジェクト処理
18は、              [キー] = dict_o objecttodict (値)
 19      リターン dict_o

 

 

そのような以下の構造をオブジェクトとして、上記方法の辞書によってに変換することができます。

 

 

 工場-少年は、次の試験に用いた例であります

1つの インポートfactory.fuzzy
 2  から demo_factory_boy.fbobject.userのインポートユーザ
 3  から demo_factory_boy.fbobject.schoolのインポート学校
 4  から demo_factory_boy.fbobject.home インポートホーム
 5  から demo_factory_boy.fbprivader.numpv インポートNumProvider
 6  
7 factory.Faker.add_provider(NumProvider )   添加自定义的NumProvider 
8  
9  クラスHomeFactory(factory.Factory):
 10      クラスのメタ:
 11          モデル=ホーム
 12の 
13      アドレス= factory.sequence(ラムダ N:' アドレス%04D '%のN)#1 factory.sequence 
14      名= " HHH "、2 ]
 15  
16  クラスSchoolFactory(factory.Factory):
 17      クラスのメタ:
 18          モデル= 学校
 19  
20      schoolName = factory.sequence(ラムダ N:' 学校%04D '%のN)#1 factory.sequence 
21     ホーム= factory.List(factory.build_batch(HomeFactory、4 ))
 22  
23  
24  クラスUserFactory(factory.Factory):
 25      クラスのメタ:
 26          モデル= ユーザー
 27  
28      名= factory.Faker(" 名前"、ロケール= " がzh_CN "factory.Faker 
29      NUM = factory.Faker(" NUM " 30      #の年齢= factory.fuzzy.FuzzyInteger(42)#factory.fuzzy.FuzzyInteger 
31      歳= factory.Faker(" random_int"分= 18、最大= 30、ステップ= 1 32      都市= factory.Faker(" アドレス"ロケール= " zh_CNに" 33      電話= factory.fuzzy.FuzzyText(" 138 "7、 " 1 " 1234567890 "factory.fuzzy.FuzzyText 
34      学校= factory.SubFactory(SchoolFactory) factory.SubFactory 
35  
36      インフォメーション= factory.List([SchoolFactory])
37      情報= factory.List(factory.build_batch(SchoolFactory、4))
41の 
42      クラスのparams:
 43          出荷= factory.Trait(
 44              名= なし
 45

 

おすすめ

転載: www.cnblogs.com/moonpool/p/11454902.html