4

我正在尝试使用开发应用服务器在 Python 中测试 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 代理?

想法和评论表示赞赏。

4

2 回答 2

10

更新这在 2012 年有效。事情在 2013 年发生了变化:官方支持存根。请参阅@siebz0r 答案。

它不在受支持的存根列表中(但我假设),但在 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 列表中,否则 testbed 将引发异常

您“注入”这个新服务存根的方式是修改 SDK 的 testbed/__init__.py 或从您的代码中进行。真的不能说哪种方法更好,因为无论哪种方式都将是一种黑客攻击,直到 init_search_stub() 正式出现在列表中。

此外,它还没有在列表中的事实可能是因为它还没有准备好:) 所以,使用它需要您自担风险。

于 2012-06-03T17:27:55.833 回答
5

似乎从 SDK 1.8.4 开始,可以从 Testbed 启用搜索存根:

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()
于 2013-11-29T14:23:42.233 回答