私はモジュールからクラスをインポートしたが、私はそれは私が型エラーを取得接頭辞としてモジュールですずにクラス名にパッチを適用しようとすると、例えば:パッチ - なぜ相対パッチのターゲット名は機能しませんか?
TypeError: Need a valid target to patch. You supplied: 'MyClass'
は、次のコードは、上記の私を与えますエラー:
import unittest
from mock import Mock, MagicMock, patch
from notification.models import Channel, addChannelWithName, deleteChannelWithName, listAllChannelNames
class TestChannel(unittest.TestCase):
@patch("Channel")
def testAddChannelWithNamePutsChannel(self, *args):
addChannelWithName("channel1")
Channel.put.assert_called_with()
コードのこの第二のバージョンは私のタイプのエラーを与えるものではありませんが:
import unittest
from mock import Mock, MagicMock, patch
from notification.models import Channel, addChannelWithName, deleteChannelWithName, listAllChannelNames
class TestChannel(unittest.TestCase):
@patch("notification.models.Channel")
def testAddChannelWithNamePutsChannel(self, *args):
addChannelWithName("channel1")
Channel.put.assert_called_with()
それはなぜですか?他の場所でChannelをちょうど "Channel"として参照することはできますが、私はモジュールプレフィックスにエラーがないようにする必要があります。また、Channel.put.assert_called_with()を呼び出すと、assert_called_withがChannel.putの属性ではないというエラーが発生するため、モジュール全体のプレフィックスを与えることはできません。誰かが何が起こっているのか説明できますか?大変ありがとう! documentationに述べたように
非常にわかりやすく、両方の質問にお応えしました。ありがとうございました。 – golmschenk
第3のオプションは、オブジェクトのメソッドだけでなく、モジュールのクラス全体を嘲笑うためにも働きます。これはまさに私が探していたものです。ありがとうございました! – balu