2017-11-21 3 views
0

ための書き込みテスト:Pythonのunittestの - 私が持っているオブジェクトインスタンス

class MyClassA: 
    def __init__(...): 
     do some stuff 
     create object attributes 


def myfunc: 
    get required data 
    create MyClassA object(s) 
    store MyClassA object(s) in a list 
    return(list of MyClassA object(s)) 

は今、私はこのようなmyfunc関数のためのユニットテストを書いている:

import unittest 

class Test_myfunc(unittest.TestCase): 
    sample_data = ... 
    expected_result = ?? 
    self.assertEqual(myfunc(sample_data), expected_result) 

私はあることをexpected_resultを設定するのですか?テストを渡すにはオブジェクトのリストにする必要がありますが、サンプルデータをmyfuncに渡すと同じインスタンスが作成されるはずです。ユニットテストで別のインスタンスのMyClassAを作成すると、インスタンスが異なるため明らかに失敗します。 myfuncの出力リストの各オブジェクトに対して、属性がsample_dataと一致することを検証したいと思います。これを行う正しい方法は何ですか?

PS:私の質問がはっきりしていることを願っています。

答えて

0

おそらく、Test_myfuncがオーバーロードされている可能性があります。これを管理しやすいチャンクに分割することを検討してください。

例えば、いくつかのテストケースの定義は次のようになります。

test_myfunc_returns_list 
test_myfunc_list_items_are_instanceof_MyClassA 
test_myfunc_contains_MyClassA_with_attributes 

考え方は、障害を理解するのが容易であるとのエラーメッセージが有益になるように、簡単なテストケースを維持することです。

最後のテストでは、個々のオブジェクトのサンプルデータが存在すると主張できます。必要に応じて、MyClassAのシナリオごとに異なるケースで、同じアイデアでより多くの定義を作成することもできます。

+0

@ Alex Forbes - フィードバックに感謝します。はい、単体テストが過負荷に見えます。より小さな/より簡単なテストに分割します。 – kronosjt

1

あなたが期待される結果と返された結果が、彼らは等しいインスタンスを含むことのみが、明確なのインスタンスが含まれていることを気にしてはいけません。 myfuncが作成するインスタンスを手動で作成し、クラスに適切な定義が__eq__であることを確認して比較を実行してください。

+0

ありがとう@chepnerは私のために働いた。 – kronosjt

関連する問題