3

ファイルを移動するメソッドをテストする必要があります。ファイル移動操作を実際に実行したくないので、テスト対象のメソッドが次のコマンドを正しく呼び出したことを知る必要があります。shutil.move

shutil.moveメソッドが実際のファイル操作を行わずにパッチを呼び出すことができるようにパッチを適用するための最良の方法は何でしょうか?

私はこのようにしましたが、醜いです。モックライブラリを使用して実行したいと思います。

    real_move = ftp2email.shutil.move
    move_operations = []
    def fake_move(src, dst):
        move_operations.append((src, dst))
    ftp2email.shutil.move = fake_move

    msg_id = '/path/to/message.xml'
    self.ch.mark_message(msg_id)
    self.assertEqual(move_operations,
                        [('/path/to/message.xml', '/path/to/archived/message.xml')])

    ftp2email.shutil.move = real_move
4

2 に答える 2

1

あなたはmoxを使ってみることができます、それはそのようなことをすることができます。

moxレシピから。

def testFoo(self):
    self.mox.StubOutWithMock(module_to_mock, 'FunctionToMock')
    module_to_mock.FunctionToMock().AndReturn(foo)

    self.mox.ReplayAll()
    ...
    self.mox.VerifyAll()
于 2012-10-26T22:51:13.883 に答える
0

モックライブラリを使用して解決しました

@mock.patch('%s.ftp2email.shutil.move' % __name__)
def test_mark_message(self, move_mock):

    self.ch.mark_message('/path/to/message.xml')
    move_mock.assert_called_with('/path/to/message.xml',
                                 '/path/to/archived/message.xml')

これはそれを行うための1つの方法にすぎません。また、「withステートメント」を使用したり、モックメソッドのstartとstopを呼び出したりすることもできます。

于 2012-10-30T14:26:30.823 に答える