我有一个使用 Python 编写的 Google App Engine 应用程序,允许用户上传文件。提交文件后,我使用
获取文件
self.request.get('uploaded_file')
我使用
获取文件名
self.request.POST['uploaded_file'].filename
我正在尝试通过手动创建一个 webapp 请求来为它编写一个单元测试,并将文件设置为我想要的方式。但是,我不知道如何初始化它以便我可以获得上传的文件及其文件名。
有什么想法吗?
如果您正在测试您的处理程序,您可能已经创建了一个 Webob 请求对象并将其传递给您的处理程序,如下所示:
request = webapp.Request({
"wsgi.input": StringIO.StringIO(),
"METHOD": "POST",
})
response = webapp.Response()
handler = MyHandler()
handler.initialize(request, response)
handler.post()
上传的文件是 cgi.FieldStorage
对象,但是 FieldStorage
并不是特别容易测试。相反,最简单的方法可能是使用模拟框架(例如 mox)来创建模拟,或者只是创建一个简单的伪造:
class FakeFieldStorage(object):
def __init__(self, filename, value):
self.filename = filename
self.value = value
然后创建一个并将其添加到请求对象,然后再将其传递给处理程序:
uploaded_file = FakeFieldStorage("test.txt", "foo")
request.POST['file'] = uploaded_file
我是一名优秀的程序员,十分优秀!