2012-06-03 138 views
4

我正在嘗試使用開發應用程序服務器測試Google App Engine的新的全文搜索功能。Google App Engine的測試存根「搜索」

search是否有一個存根,允許用testbed本地單元測試來測試它?

下面是示例代碼拋出異常:

#!/usr/bin/python 
from google.appengine.ext import testbed 

from google.appengine.api import search 

def foo(): 
    d = search.Document(doc_id='X', 
     fields=[search.TextField(name='abc', value='123')]) 
    s = search.Index(name='one').add(d) 

tb = testbed.Testbed() 
tb.activate() 
# tb.init_search_stub() ## does this exist? 

foo() 

通過foo()引發的異常是:AssertionError: No api proxy found for service "search"。是否已經爲搜索編寫了api代理?

思考和評論表示讚賞。

回答

5

看來,由於SDK 1.8.4搜索存根可以從測試平臺啓用:

from google.appengine.api import search 
from google.appengine.ext import testbed 

try: 
    tb = testbed.Testbed() 
    tb.activate() 
    tb.init_search_stub() 
    index = search.Index(name='test') 
    index.put(search.Document()) 
finally: 
    tb.deactivate() 
10

UPDATE這在2012年有效。事情在2013年發生了變化:存根被官方支持。請參閱@ siebz0r答案。

它不在list of supported stubs(但我假設),但是在simple_search_stub.py中有一個SearchServiceStub,它看起來像你在做什麼。

我沒有測試過自己,但你可以嘗試做這樣的事情:

testbed = testbed.Testbed() 
testbed.activate() 

stub = SearchServiceStub() 
testbed._register_stub(SEARCH_SERVICE_NAME, stub) 

SEARCH_SERVICE_NAME應該是"search",也應該出現在名單SUPPORTED_SERVICES,otherwise testbed will raise an exception

「注入」這個新服務存根的方式是修改SDK的testbed/__ init__.py或者從代碼中執行。不能真正說出哪種方法更好,因爲它會以任何方式進行破解,直到init_search_stub()將正式出現在列表中。

此外,它不在列表中的事實可能是因爲它只是沒有準備好:)所以,使用它你自己的風險。

+0

通過@ siebz0r答案是對這個問題的讀者,前進最好的一個,所以我將其標記爲正確。雖然這個答案在過渡期間很棒。乾杯。 –