0
は私が設定クラスをインスタンス化し、そのクラスのメソッドを呼び出すクラスメソッドを持って模擬するために呼び出しますメソッドをテストするが、それが動作していません。モッキング初期化ステップと追加方法は
import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner
class TestFileRunner(unittest.TestCase):
@mock.patch('ConfigB.ConfigB.__init__')
def test_methodscalled(self, cfgB):
cfgA = MagicMock()
fileRunner = FileRunner()
cfgB.return_value = None
cfgB.return_value.createValue.return_value = 17
fileRunner.runProcess(cfgA)
をしかし、私はクラスをテストするとき、私はエラーを取得:
AttributeError: 'NoneType' object has no attribute 'createValue'
私はまた、このようなテストクラス書いてみました:
import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner
class TestFileRunner(unittest.TestCase):
@mock.patch('ConfigB.ConfigB.__init__')
def test_methodscalled(self, cfgB):
cfgA = MagicMock()
fileRunner = FileRunner()
cfgBMock = mock.Mock()
cfgBMock.createValue.return_value = 17
cfgB.return_value = cfgBMock
fileRunner.runProcess(cfgA)
をしかし、私はこれをしようとすると、私はエラーを取得:
TypeError: __init__() should return None, not 'Mock'
は私が間違って何をしているのですか?私のクラスをテストする良い方法はありますか?
*編集:ドン・カービー1として
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.createValue')
def test_methodscalled(self, createValue, cfgB):
cfgA = MagicMock()
fileRunner = FileRunner()
createValue.return_value = 17
cfgB.return_value = None
fileRunner.runProcess(cfgA)
可能性のある重複しました[ Mock親クラス\ _ \ _ init \ _ \ _メソッド](https://stackoverflow.com/questions/32349855/mock-parent-class-init-method) – grundic
Initは[None以外の値を返さない場合があります](https: //docs.python.org/3/reference/datamodel.html#object.__init__)、またはTypeErrorが発生しています。あなたが 'ConfigB.createvalue'を模倣したければ、' @ mock.patch( 'ConfigB.ConfigB.createvalue') 'をしてはいけませんか? –
@IljaEveriläが働いていました。更新されたテストメソッドを追加しました。ありがとう。 – EliSquared