2017-10-25 7 views
1

私はユニットテストの初心者です。誰でも私に模擬とパッチでこのデコレータをテストさせることができますデコレータをテストするには?

def fetch_entity_from_ES(self,func): 
    @wraps(func) 
    def ES_wrapper(*args): 
     entity_type = args[0] 
     entity_id = args[1] 
     search_service_utility = ElasticSearchUtilities(self.config) 
     entity = search_service_utility.fetch_entity_from_ES(entity_type, entity_id) 
     if not entity: 
      return func(*args) 
     return entity 
    return ES_wrapper 

答えて

1

デコレータをテスト機能に適用してテストできます。次に、装飾された関数を実行し、動作を確認します。

この場合、装飾された関数は内部関数なので、必要に応じてテストメソッドのselfなどにアクセスできます。それは、自己のパラメータを持っていますが、私は機能としてそれを扱わたので

class TestFetchEntityFromES(TestCase): 

    def test_fetch_entity_from_ES(self): 

     @fetch_entity_from_ES 
     def foo(entity_type, entity_id): 
      return 'bar' 

     with patch.object(ElasticSearchUtilities, 'fetch_entity_from_ES', 
          return_value=None): 
      self.assertEqual(foo('type1', 'id1'), 'bar') 
     with patch.object(ElasticSearchUtilities, 'fetch_entity_from_ES', 
          return_value='baz'): 
      self.assertEqual(foo('type1', 'id1'), 'baz') 

ところで、fetch_entity_from_ESは方法のように見えます。

関連する問題