【发布时间】:2012-09-27 01:02:22
【问题描述】:
我在项目中使用 i18 时遇到了单元测试问题。
我的项目使用框架 i18 和 webapp2
该函数使用 i18 的翻译。但是当我测试时,我得到了错误——缺少全局变量请求。
例如它是:
from unittest import TestCase, main
from webapp2_extras.i18n import lazy_gettext as _
def Hello(a):
if a > 0:
message = _('My great message!11 a > 0')
else:
message = _('My great message!11 a =< 0')
return message
class TestHandler(TestCase):
def testHello0(self):
self.assertEqual(Hello(0), 'My great message!11 a =< 0')
def testHello3(self):
self.assertEqual(Hello(3), 'My great message!11 a > 0')
if __name__ == '__main__':
main()
我有消息:
FAIL: testHello0 (text3.TestHandler)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/text3.py", line 14, in testHello0
self.assertEqual(Hello(0), 'My great message!11 a =< 0')
AssertionError: Request global variable is not set.
我有解决这个问题的方法,但我不喜欢它。这是拐杖。如何在不使用相似性 webapp2 上的框架的情况下测试我的功能
from unittest import TestCase, main
from webapp2_extras.i18n import lazy_gettext as _
import webapp2
def Hello(a):
if a > 0:
message = _('My great message!11 a > 0')
else:
message = _('My great message!11 a =< 0')
return message
class OneHandler(webapp2.RequestHandler):
def get(self):
myNumber = self.request.get('myNumber')
myNumber = int(myNumber)
message = Hello(myNumber)
self.response.write(message)
routes = [('/One', OneHandler)]
app = webapp2.WSGIApplication(routes = routes)
class TestHandler(TestCase):
def testHello0(self):
myNumber = 0
URL = '/One?myNumber=%s' % myNumber
self.response = app.get_response(URL)
self.mess = self.response.body
self.assertEqual(self.mess, 'My great message!11 a =< 0')
def testHello3(self):
myNumber = 3
URL = '/One?myNumber=%s' % myNumber
self.response = app.get_response(URL)
self.mess = self.response.body
self.assertEqual(self.mess, 'My great message!11 a > 0')
if __name__ == '__main__':
main()
干得好!
在 0.047 秒内运行 2 次测试 好的
但这不是一个好的解决方案。如何测试我的功能而不使用 webapp2 等?
【问题讨论】:
标签: python unit-testing google-app-engine webapp2 python-babel