2017-01-31 25 views
0

別のクラスメソッドを呼び出すクラスメソッドをテストしようとしています。私はこの質問を見ましたが、これは少し違うと思います。私はその答えをquestionにしようとしましたが、動作しませんでした。私はこのエラーを取得し続ける:ここpython mock unittest: 'self'パラメータにデフォルト値がありません

AssertionError: Expected call: run(autocommit=False, parameters=None, sql='SELECT') 
Actual call: run(<plugins.bigsql.hooks.bigsql_hook.BigSqlHook object at 0x10b201050>, 'SELECT', False, parameters=None) 
'self' parameter lacking default value 

は、テスト用のコードです:ここで

import mock 

from plugins.bigsql.hooks import BigSqlHook 
from plugins.bigsql.operators import BigSqlOperator 


@mock.patch.object(BigSqlHook, 'run', autospec=True) 
def test_bigsql_hook(mock_hook_object): 
    """Test BigSqlOperator connection is formed correctly.""" 
    operator = BigSqlOperator(task_id='test', jdbc_conn_id='sqlite_default', sql='SELECT') 
    operator.execute(context={}) 

    mock_hook_object.assert_called_with(sql="SELECT", autocommit=False, parameters=None) 

は、私がテストしようとしているクラスメソッドのコードです:

import logging 

from airflow.operators.jdbc_operator import JdbcOperator 

from plugins.bigsql.hooks import BigSqlHook 


class BigSqlOperator(JdbcOperator): 
    """Extends py:class:`airflow.hooks.jdbc_operator.JdbcOperator` to connect to IBM BigSQL. 

    Notes: 
     Works the same as JdbcOperator, just uses the BigSqlHook instead 
    """ 

    def execute(self, context): 
     """Execute SQL statement on IBM BigSQL.""" 
     logging.info('Executing: {0}'.format(str(self.sql))) 
     hook = BigSqlHook(jdbc_conn_id=self.jdbc_conn_id) 
     hook.run(self.sql, self.autocommit, parameters=self.parameters) 

前もって感謝します!

答えて

1

私はそれを解決しました。 auto_spec=Trueを削除し、キーワードの引数を渡さなくてはなりませんでした。

これが働いた:

import mock 

from plugins.bigsql.hooks import BigSqlHook 
from plugins.bigsql.operators import BigSqlOperator 


@mock.patch.object(BigSqlHook, 'run') 
def test_bigsql_hook(mock_hook_object): 
    """Test BigSqlOperator connection is formed correctly.""" 
    operator = BigSqlOperator(task_id='test', jdbc_conn_id='sqlite_default', sql='SELECT') 
    operator.execute(context={}) 

    mock_hook_object.assert_called_with("SELECT", False, parameters=None) 
関連する問題