3

私のテストではurlfetch、NDB パッケージによって提供されるモックを作成したいので、テストの実行中に実際の http リクエストは行われません。

urlfetch()を返すFutureので、きちんとモックするにはNDBの内部を知る必要がありそうです...また、何とかモックできると思っていましgoogle.appengine.api.urlfetch.create_rpc()た...しかし、私はこれまで何の進展もありませんでした...

これどうやってするの?

ありがとうございました。

4

1 に答える 1

6

私は自分の質問に答えます。以下のコードでは、Michael Foord によるモックライブラリを使用しています。

import unittest
from google.appengine.ext import testbed, ndb
from mock import patch, Mock

class MyTestCase(unittest.TestCase):

    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_urlfetch_stub()

        # mock urlrfetch service
        uf = self.testbed.get_stub('urlfetch')
        uf._Dynamic_Fetch = Mock()

    @patch('google.appengine.api.urlfetch.urlfetch_service_pb.URLFetchResponse')
    def test_make_request(self, URLFetchResponse):
        # mocking rpc response object
        response = URLFetchResponse.return_value
        response.contentwastruncated.return_value = False
        response.statuscode.return_value = 200
        response.content.return_value = 'Hello world!'        

        ctx = ndb.get_context()
        fut = ctx.urlfetch('http://google.com')
        result = fut.get_result()

        self.assertEquals(result.content, 'Hello world!')

    def tearDown(self):
        self.testbed.deactivate()
于 2012-03-30T20:32:25.557 に答える