2

pysftp モジュールを呼び出す SFTP ヘルパー クラスを単体テストしようとしています。副作用がないように pysftp からの実際のネットワーク呼び出しをモックしたいのですが、クラスが基礎となる SFTP メソッドを正しいパラメーターで正しく呼び出していることを確認してください。

これまでのコードの簡単な例を次に示します。

import pysftp
import unittest
import mock

class SFTPHelper(object):
    def __init__(self, host, username, password, files_dir):
        self.host = host
        self.username = username
        self.password = password
        self.files_dir = files_dir

    def list_files(self):
        with pysftp.Connection(
                self.host,
                username=self.username,
                password=self.password) as sftp:
            return sftp.listdir(self.files_dir)

class TestSFTPHelper(unittest.TestCase):
    @mock.patch('pysftp.Connection')
    def test_list_files(self, mock_connection):
        sftp_helper = SFTPHelper('somehost', 'someuser', 'somepassword', '/some/files/dir')
        sftp_helper.list_files()

        # this assertion passes
        mock_connection.assert_called_with(
            'somehost', password='somepassword', username='someuser')

        # this assertion does not pass
        mock_connection.listdir.assert_called_with('/some/files/dir')

アサーション エラー:

AssertionError: Expected call: listdir('/some/files/dir')
Not called

インスタンスで関数が呼び出されたことをアサートする必要があるため、機能しないと思いますが、メソッドで使用された pysftp.Connection のインスタンスを取得するにはどうすればよいですか?

4

1 に答える 1