価値私はインスタンス化とcfgB.Idプロパティ呼び出しの両方を模擬しようとしています。、ではない私は、以下の構成クラスがいる
import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner
class TestFileRunner(unittest.TestCase):
@mock.patch('ConfigB.ConfigB.__init__')
@mock.patch('ConfigB.ConfigB.Id')
def test_methodscalled(self, cfgBId, cfgBInit):
fileRunner = FileRunner()
cfgBId.return_value = 17
cfgBInit.return_value = None
print(cfgBId)
fileRunner.runProcess(1)
fileRunnerが呼び出される前のprint(cfgBId)ステートメントに注意してください。 FileRunnerにラインで呼び出さ取得されていない
cfgBId.return_value = 17
()クラス:私はテストクラスでここに戻り値を設定したときにいくつかの理由
<MagicMock name='Id' id='157297352'>
<MagicMock name='Id' id='157297352'>
:私は、次のような出力が得られます。
print(cfgB.Id)
設定プロパティを正しく表示するには、何が必要ですか?
また、私の 'ConfigB'クラスのインスタンス化は、Idプロパティにインスタンス化と呼び出しをパッチしたい理由よりもはるかに複雑です。
*更新:@mgilsonにより示唆されるように、私は私のクラスを変更したが、まだ動作していない:
<MagicMock name='ConfigB' id='157793640'>
<MagicMock name='ConfigB().Id' id='157020512'>
:
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):
fileRunner = FileRunner()
cfgB.Id = 17
print(cfgBId)
fileRunner.runProcess(1)
は、私が今、2つの印刷文から次の出力を取得しています
上記がうまくいかない理由がありますか?
*ソリューション:
私はそれを示唆し@mgilson試験方法に若干の変更後に仕事を得ることができた:私は今、次の出力を得る
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):
fileRunner = FileRunner()
cfgB().Id = 17
print(cfgBId)
fileRunner.runProcess(1)
:
<MagicMock name='ConfigB' id='157147936'>
17
私はそれを実装しようとしました(私の記事の私の編集を参照)。しかし、私はまだ正しい出力を得ていません。 – EliSquared
Acutally @mgilson私はそれを動作させることができました。あなたのコードの行を 'cfgB.Id = 17'から' cfgB()。Id = 17'に変更したと思います。かっこですべてが変わりました。それはあなたに理にかなっていますか?括弧を含めるように投稿を編集すると、それを解決策としてマークすることができます。 – EliSquared
@EliSquared - うん、意味がある。 'Id 'をあなたのモックの' return_value'に添付したいのですが、モックそのもの(私の悪いこと)ではなく。これを反映するようにコードを編集しました。 – mgilson