I持って次の設定クラス:クラスをモックと返すいくつかの値
from config.ConfigB import ConfigB
class FileRunner(object):
def runProcess(self, cfgA)
for file in cfgA.listFiles:
cfgB = ConfigB(file)
print(cfgB.Id)
print(cfgB.fileName)
が、私が作成をテストするには:以下のクラスで複数回インスタンスとプロパティがアクセスされ
class ConfigB(object):
Id = None
fileName = None
def __init__(self, file):
self.Id = self.searchForId(file)
self.fileName = file
私がFileRunnerクラスのためにConfigBをモックする次のテストクラス:
import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner
class TestFileRunner(unittest.TestCase):
@mock.patch('FileRunner.ConfigB')
def test_methodscalled(self, cfgB):
cfgA = Mock()
cfgA.listFiles = ['File1','File2']
cfgB().Id.side_effect = [1,2]
cfgB().fileName.side_effect = ['File1','File2']
fileRunner = FileRunner()
fileRunner.runProcess(cfgA)
私は 'id'と 'fileName'の両方に対して複数の値を返すようにcfgBのモックを取得しようとしています。 cfgB().fileName = 'File1'
を使用すると、cfgBが 'File1'を2回返すモックを得ることができますが、複数の戻り値を繰り返すことができれば好きです。何かできることはありますか?
*編集:私は上記のテストは、特定の値を返すために機能せず、代わりに、私は次の出力を得ることを明確にしたいと思います:
<MagicMock name='cfgB().Id' id='160833320'>
<MagicMock name='cfgB().fileName' id='160833320'>
<MagicMock name='cfgB().Id' id='160833320'>
<MagicMock name='cfgB().fileName' id='160833320'>
をあなたのコードに問題がいくつかあります。1.第1の方法は、 '' __init__''はなく、 '' __Init__'です'; 2. '' Id''と '' fileName''はクラス変数であるため、[ここ](https://docs.python.org/3.6/tutorial/classes.html#class-and-インスタンス変数)。単純にそれらを削除して、 '' __init__''メソッドの中にassigmentだけ残すことができます。これは**あなたの問題を解決するかもしれません(私はテストしていないし、解決策ではないかもしれません) –
'__init__'と' __Init__'は私の実際のコードではないタイプミスです。実際の '__init__'メソッドは私のコードがはるかに複雑であるため、戻り値を模擬したいので、' __init__'メソッドを機能させたままにしたくありません。 – EliSquared