2012-06-03 40 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答案是对这个问题的读者,前进最好的一个,所以我将其标记为正确。虽然这个答案在过渡期间很棒。干杯。 –