0

クラスにパッチを適用しようとしており、テスト対象の関数にパッチを適用したクラスのインスタンスを作成させ、そのインスタンスにクラス関数を呼び出させてから、そのクラス関数が呼び出されたことをテストしたいと考えています。これどうやってするの?

以下は、私のコードの基本的なバリエーションです。

テストファイル:

class TestChannel(unittest.TestCase):
    @patch("notification.models.Channel")
    def testAddChannelWithNamePutsChannel(self, *args):
        addChannelWithName("channel1")
        self.assertTrue(Channel.put.called)

テストするコード:

def addChannelWithName(name):
    channel = Channel(name = name)
    channel.put()

基本的には、 channel.put() が呼び出されたことをテストしたい。もちろん、クラス関数 put() がインスタンスに対してではなく一般的に呼び出されているかどうかを確認しているため、このコードは機能しません。渡すには、インスタンスで呼び出す必要があります。Channel クラスのさまざまな部分をモックするいくつかのバリエーションを試しましたが、それは戻り値ですが、うまく動作しないようです。どうすればこれを行うことができますか? どうもありがとう!

4

1 に答える 1

1

addChannelWithName 関数が Channel インスタンスを返すようにするのはどうですか?

def addChannelWithName(name):
    channel = Channel(name = name)
    channel.put()
    return channel

class TestChannel(unittest.TestCase):
    @patch("notification.models.Channel")
    def testAddChannelWithNamePutsChannel(self, *args):
        channel = addChannelWithName("channel1")
        self.assertTrue(channel.put.called)
于 2013-04-17T15:35:18.663 に答える