2012-06-03 18 views
3

ID来BLOBSTORE喜欢写一些单元测试,除其他事情需要read a blobstore file如何模拟文件上传使用GAE开发服务器测试平台的Python

如何编写单元测试setUp是把一些文件中testbed Blob存储所以它会速效读这样:

blob_info = BlobInfo(blob_key) 
reader = BlobReader(blob_info) 
reader.readline() 

编辑:

我不寻找一种方式来测试files API,我想在测试用例blobstore存储中添加一些任意数据,以避免测试用例setUp阶段,所以我可以针对这些数据运行测试。

回答

6

您可以将以下内容添加到您的setUp方法中,并可能将blob_key存储为self.blob_key以供以后使用。 init_files_stub非常重要,因为它使用内存blobstore初始化文件服务。

self.testbed.init_blobstore_stub() 
self.testbed.init_files_stub() 
from google.appengine.api import files 
file_name = files.blobstore.create(mime_type='application/octet-stream') 
with files.open(file_name, 'a') as f: 
    f.write('blobdata') 
files.finalize(file_name) 
blob_key = files.blobstore.get_blob_key(file_name) 

注意,测试平台是指from google.appengine.ext import testbedself.testbed是测试平台的实例。

随着init_files_stub,这正是为docs描述:

+0

因此,它是工作或没有? –

+0

我的第一个例子适用于我,如果我把它放在setUp中,它将'blobdata'(可以是图片字节或其他)写入一个ID为'blob'的blob,在你的例子中reader.read()将返回'blobdata' 。在setUp中保存self.blob_key,如果你需要测试中的确切键。 第二个例子似乎是根据API来做到这一点的适当方式,但不起作用。当你尝试使用它时,第一个例子如何失败? – tesdal

+0

对不起,我还没有测试过,'应该工作'你的答案的一部分困惑;)我同时找到了一个解决方案,把'BlobInfo'放入数据存储中,像这样:'datastore.Put(datastore.Entity(' __BlobInfo__',name = file_path,namespace ='')'。你的解决方案更漂亮,thx mate! –

相关问题