0
私は、pysftpモジュールをいくつか呼び出すSFTPヘルパクラスを単体テストしようとしています。 pysftpからの実際のネットワーク呼び出しを模擬して、副作用がないようにして、クラスが正しいparamatersを使って基礎となるSFTPメソッドを正しく呼び出していることを確認してください。ここで単体テストでのPythonクラスの模擬とインスタンスの検証
は、これまでの私のコードの簡単な例です:
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のインスタンスを取得するにはどうすればよいですか?
1.あなたは* * "動作しない" より明確に問題の説明を与えることができますか?あなたは*コンテキストマネージャー*を模倣しようとしています、あなたはそれを読んでください。 – jonrsharpe
@jonrsharpeがアサーションエラー –
@ dnit13で修正されました。単にstackoverflowの質問でタイプミスがありました。私は実際のコードでそれをやっています。固定された –