我在Python中有一个Google App Engine应用程序,可让用户上传文件。提交文件后,我使用
获取文件self.request.get('uploaded_file')
我使用
获取文件名self.request.POST['uploaded_file'].filename
我正在尝试通过手动创建一个webapp请求来编写单元测试,文件设置我想要它。但是,我无法弄清楚如何初始化它,以便我可以获取上传的文件及其文件名。
有什么想法吗?
答案 0 :(得分:4)
如果你正在测试你的处理程序,你可能已经创建了一个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
答案 1 :(得分:1)
使用urlopen
或类似内容,让测试实际发送带有附加到您应用的文件的请求来测试它。
然后验证上传后的响应和状态。