3

私はPython開発にかなり慣れていないので、単体テスト用の関数にモックを注入するための最良の方法が何であるかわかりません。

私は次のような関数を持っています:

import exampleModule

def func():
    ls = createList()
    exampleModule.send(ls)

exampleModule.send上記のコードでは、メソッドをモックしたいと思います。

メソッドを引数として関数に渡す必要がありますか?好き:

def func(invokeMethod):
    ls = createList()
    invokeMethod(ls)

そして、ユニットテストで私はモックに合格することができます。しかし、呼び出し元に呼び出しメソッドを指定させたくありません。

それを行う正しい方法は何ですか?

4

2 に答える 2

2

Python3の一部であるMichaelFoordによるモックライブラリを使用できます。これにより、この種のモックが非常に便利になります。それを行う1つの方法は次のとおりです。

>>> from mock import patch
>>> import exampleModule
>>>    
>>> def func():
...     ls = []
...     exampleModule.send(ls)
... 
>>> with patch('exampleModule.send') as send:
...     func()
...     assert send.called

ここでは、コンテキストマネージャーとして使用します。ただしpatch、デコレータとしても使用できます。しかし、使用方法は他にもありmock、モック/スタブのすべてのニーズを満たすことができます。

于 2012-11-13T19:41:17.613 に答える
1

Pythonは第一級市民としての関数をサポートしているため、単体テストの目的でメソッドの実装をオーバーライドできます。

このアプローチは基本的にあなたに道を示します。

class Foo
   def thing_to_mock():
      really_expensive_stuff()

   def thing_to_test():
       i = 1 + 2
       thing_to_mock()
       return i

class FooTest
  def testingThingToTest():
       def mocker():
           pass
       toTest = Foo()
       toTest.thing_to_mock = mocker
       # assert here

または、Python 3.3では、組み込みのモックサポートを使用できます。

于 2012-11-13T19:15:08.370 に答える