2012-03-30 13 views
3

私のテストでは、urlfetchをNDBパッケージで提供していますので、テストの実行中に実際のhttpリクエストは行われません。ndb.get_context()を模擬する方法。urlfetch?

urlfetch()戻りFuture、それは私がそれを適切に模擬するためにNDBの内部を知っておく必要がありますようですので...また、私は私が何とかgoogle.appengine.api.urlfetch.create_rpc()を模擬できると思っていた...しかし、私はこれまでの任意の進歩をしなかった...

どうすればいいですか?

ありがとうございます。

答えて

5

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

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() 
+0

簡単な方法: 'self.testbed.init_urlfetch_stub(urlmatchersの= [(ラムダURL:url.startswith( "http://example.com"、self.get_example_com))'例えばurlfetch_to_gcs_stubを参照してください。実装。 – rmmh